yasm-1.3.0/0000775000175000017500000000000012372060147007471 500000000000000yasm-1.3.0/libyasm/0000775000175000017500000000000012372060147011131 500000000000000yasm-1.3.0/libyasm/cmake-module.c0000644000175000017500000000756411626275017013577 00000000000000/* * 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); } yasm-1.3.0/libyasm/bitvect.h0000644000175000017500000007407311626275017012700 00000000000000#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 yasm-1.3.0/libyasm/section.h0000644000175000017500000003416011626275017012675 00000000000000/** * \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 yasm-1.3.0/libyasm/mergesort.c0000644000175000017500000003415311626275017013235 00000000000000/* * 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*/ yasm-1.3.0/libyasm/strcasecmp.c0000644000175000017500000000637311626275017013375 00000000000000/* * 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 } yasm-1.3.0/libyasm/value.c0000644000175000017500000007017011626275017012341 00000000000000/* * 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, ""); } } yasm-1.3.0/libyasm/errwarn.h0000644000175000017500000003263511626275017012716 00000000000000/** * \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 yasm-1.3.0/libyasm/bc-incbin.c0000644000175000017500000002113111626275017013042 00000000000000/* * 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); } yasm-1.3.0/libyasm/insn.h0000644000175000017500000002361311626275017012201 00000000000000/** * \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 yasm-1.3.0/libyasm/xmalloc.c0000644000175000017500000000633211626275017012663 00000000000000/* * 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); } yasm-1.3.0/libyasm/symrec.h0000664000175000017500000003641112371744440012535 00000000000000/** * \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 yasm-1.3.0/libyasm/inttree.c0000644000175000017500000007017211626275017012701 00000000000000#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 yasm-1.3.0/libyasm/linemap.c0000644000175000017500000002126411626275017012652 00000000000000/* * 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)); } yasm-1.3.0/libyasm/tests/0000775000175000017500000000000012372060147012273 500000000000000yasm-1.3.0/libyasm/tests/value-samesym.asm0000644000175000017500000000006711542263760015512 00000000000000extern RW mov [eax + (RW + 22032) - (RW + 23056)], eax yasm-1.3.0/libyasm/tests/timesunder.asm0000644000175000017500000000004511542263760015075 00000000000000je label times 82h-($-$$) nop label: yasm-1.3.0/libyasm/tests/opt-align2.hex0000644000175000017500000000205011542263760014674 000000000000000f 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 yasm-1.3.0/libyasm/tests/externdef.hex0000644000175000017500000000000011542263760014675 00000000000000yasm-1.3.0/libyasm/tests/timesunder.hex0000644000175000017500000000101011542263760015072 000000000000000f 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 yasm-1.3.0/libyasm/tests/opt-struc.asm0000644000175000017500000000167411542263760014667 00000000000000[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 yasm-1.3.0/libyasm/tests/splitpath_test.c0000644000175000017500000001337411626275017015441 00000000000000/* * * 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; } yasm-1.3.0/libyasm/tests/times-res.asm0000644000175000017500000000005511542263760014627 00000000000000times 5 resb 4 times 0 resb 2 times 1 resb 0 yasm-1.3.0/libyasm/tests/expr-fold-level.asm0000644000175000017500000000005611542263760015725 00000000000000begin A equ 09000h a dd (A+(end-begin)+3) end yasm-1.3.0/libyasm/tests/strucsize.hex0000644000175000017500000000006011542263760014752 0000000000000001 00 00 00 02 00 00 00 08 00 08 00 yasm-1.3.0/libyasm/tests/value-mask.hex0000644000175000017500000000001011542263760014757 00000000000000f8 f8 yasm-1.3.0/libyasm/tests/opt-circular3-err.errwarn0000644000175000017500000000005011542263760017067 00000000000000-:6: error: circular reference detected yasm-1.3.0/libyasm/tests/opt-struc.hex0000644000175000017500000000014011542263760014656 0000000000000018 00 00 00 18 01 00 00 58 01 00 00 18 00 00 00 18 01 00 00 00 00 00 00 yasm-1.3.0/libyasm/tests/absloop-err.errwarn0000644000175000017500000000007511542263760016046 00000000000000-:6: error: circular reference detected in memory expression yasm-1.3.0/libyasm/tests/value-mask.asm0000644000175000017500000000006611542263760014766 00000000000000db label db label & 0xff section .bss resb 500 label: yasm-1.3.0/libyasm/tests/reserve-err2.asm0000644000175000017500000000022411542263760015240 00000000000000; 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 yasm-1.3.0/libyasm/tests/incbin.asm0000644000175000017500000000216211542263760014162 00000000000000incbin "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 yasm-1.3.0/libyasm/tests/emptydata.hex0000644000175000017500000000000011542263760014701 00000000000000yasm-1.3.0/libyasm/tests/times0.asm0000644000175000017500000000001511542263760014114 00000000000000times 0 db 1 yasm-1.3.0/libyasm/tests/Makefile.inc0000644000175000017500000001100311626275017014421 00000000000000TESTS += 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) yasm-1.3.0/libyasm/tests/opt-oldalign.hex0000644000175000017500000000021411542263760015311 00000000000000b8 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 yasm-1.3.0/libyasm/tests/unary.hex0000644000175000017500000000012011542263760014052 00000000000000b8 ff ff ff ff b8 fa ff ff ff bb 00 00 00 00 bb fb ff ff ff yasm-1.3.0/libyasm/tests/unary.asm0000644000175000017500000000007211542263760014054 00000000000000[bits 32] mov eax, ~0 mov eax, ~5 mov ebx, -0 mov ebx, -5 yasm-1.3.0/libyasm/tests/jmpsize1-err.asm0000644000175000017500000000222511542263760015250 00000000000000jmp 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 yasm-1.3.0/libyasm/tests/timesfwd.hex0000644000175000017500000000005011542263760014540 0000000000000090 90 90 90 90 90 ff c0 ff c1 yasm-1.3.0/libyasm/tests/opt-circular2-err.asm0000644000175000017500000000006611542263760016175 00000000000000 times (label-$+1) db 0 label: db 'NOW where am I?' yasm-1.3.0/libyasm/tests/opt-immexpand.hex0000644000175000017500000000203411542263760015504 000000000000000f 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 yasm-1.3.0/libyasm/tests/bitvect_test.c0000644000175000017500000001070411626275017015063 00000000000000/* * * 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; } yasm-1.3.0/libyasm/tests/opt-oldalign.asm0000644000175000017500000000010111542263760015300 00000000000000mov ax, 5 times ($$-$) & 1Fh nop ; Long word alignment mov bx, 5 yasm-1.3.0/libyasm/tests/expr-simplify-identity.hex0000644000175000017500000000006411623775055017367 0000000000000000 00 00 00 00 00 00 00 67 3a 44 9e 08 yasm-1.3.0/libyasm/tests/opt-immexpand.asm0000644000175000017500000000014311542263760015477 00000000000000label1: je label3 times 124 nop label2: je label4 label3: times 128 nop label4: push label2-label1 yasm-1.3.0/libyasm/tests/uncstring_test.c0000644000175000017500000001173311626275017015442 00000000000000/* * * 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; } yasm-1.3.0/libyasm/tests/strucsize.asm0000644000175000017500000000026611542263760014756 00000000000000struc 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 yasm-1.3.0/libyasm/tests/opt-circular1-err.asm0000644000175000017500000000006011542263760016166 00000000000000 times (label-$) db 0 label: db 'Where am I?' yasm-1.3.0/libyasm/tests/value-err.asm0000644000175000017500000000017111542263760014620 00000000000000label: 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 yasm-1.3.0/libyasm/tests/value-err.errwarn0000644000175000017500000000017711542263760015526 00000000000000-:2: error: effective address too complex -:3: error: immediate expression too complex -:8: error: data expression too complex yasm-1.3.0/libyasm/tests/equ-expand.hex0000644000175000017500000000005011542263760014765 0000000000000090 83 fb 42 83 fb 42 83 fb 42 yasm-1.3.0/libyasm/tests/value-shr-symexpr.hex0000644000175000017500000000004011542263760016330 0000000000000006 00 05 02 01 00 07 00 yasm-1.3.0/libyasm/tests/opt-circular2-err.errwarn0000644000175000017500000000005011542263760017066 00000000000000-:1: error: circular reference detected yasm-1.3.0/libyasm/tests/expr-fold-level.hex0000644000175000017500000000002011542263760015720 0000000000000007 90 00 00 yasm-1.3.0/libyasm/tests/data-rawvalue.hex0000644000175000017500000000006411542263760015460 0000000000000000 00 00 00 00 00 00 00 00 00 00 00 00 yasm-1.3.0/libyasm/tests/libyasm_test.sh0000755000175000017500000000013211626275017015250 00000000000000#! /bin/sh ${srcdir}/out_test.sh libyasm_test libyasm/tests "libyasm" "-f bin" "" exit $? yasm-1.3.0/libyasm/tests/data-rawvalue.asm0000644000175000017500000000002111542263760015445 00000000000000x db 0 dd 0,x,0 yasm-1.3.0/libyasm/tests/timesfwd.asm0000644000175000017500000000015411542263760014541 00000000000000[section .text] [bits 64] ;[global foo] ;[global bar] times (foo-bar+$$-$)&7 nop foo: inc eax bar: inc ecx yasm-1.3.0/libyasm/tests/opt-gvmat64.asm0000644000175000017500000003435311542263760015017 00000000000000;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 yasm-1.3.0/libyasm/tests/times-res.errwarn0000644000175000017500000000011111542263760015520 00000000000000-:1: warning: uninitialized space declared in code/data section: zeroing yasm-1.3.0/libyasm/tests/opt-align2.asm0000644000175000017500000000015211542263760014671 00000000000000je label1 je label1 times 4 nop times 8 nop align 8 times 110 nop je label2 label1: times 128 nop label2: yasm-1.3.0/libyasm/tests/externdef.errwarn0000644000175000017500000000017211542263760015603 00000000000000-:1: warning: binary object format does not support extern variables -:2: warning: `foo' both defined and declared extern yasm-1.3.0/libyasm/tests/combpath_test.c0000644000175000017500000001265211626275017015224 00000000000000/* * * 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; } yasm-1.3.0/libyasm/tests/opt-immnoexpand.asm0000644000175000017500000000015711542263760016041 00000000000000label1: times 2 nop je label3 times 123 nop label2: je label4 label3: times 128 nop label4: push label2-label1 yasm-1.3.0/libyasm/tests/expr-wide-ident.hex0000644000175000017500000000004411542263760015726 0000000000000067 66 8d 94 0a 09 00 00 00 yasm-1.3.0/libyasm/tests/opt-align3.asm0000644000175000017500000000025311542263760014674 00000000000000je 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: yasm-1.3.0/libyasm/tests/absloop-err.asm0000644000175000017500000000010611542263760015141 00000000000000[absolute x] label1: [absolute label1] x: [section .text] mov ax, [x] yasm-1.3.0/libyasm/tests/opt-gvmat64.hex0000644000175000017500000000555411542263760015024 0000000000000048 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 yasm-1.3.0/libyasm/tests/value-shr-symexpr.asm0000644000175000017500000000012211542263760016325 00000000000000dw foo dw (foo+((1<<9)-1)) dw (foo+((1<<9)-1)) >> 9 foo: dw (bar+foo)>>(0+1) bar: yasm-1.3.0/libyasm/tests/floatnum_test.c0000644000175000017500000003166511626275017015261 00000000000000/* * * 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; } yasm-1.3.0/libyasm/tests/charconst64.hex0000644000175000017500000000005011542263760015054 0000000000000048 b8 31 32 33 34 35 36 37 38 yasm-1.3.0/libyasm/tests/jmpsize1.hex0000644000175000017500000000204411542263760014465 00000000000000eb 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 yasm-1.3.0/libyasm/tests/reserve-err1.asm0000644000175000017500000000022211542263760015235 00000000000000; 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 yasm-1.3.0/libyasm/tests/equ-expand.asm0000644000175000017500000000031411542263760014764 00000000000000nop 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 yasm-1.3.0/libyasm/tests/timesover-err.errwarn0000644000175000017500000000004111542263760016415 00000000000000-:2: error: multiple is negative yasm-1.3.0/libyasm/tests/emptydata.asm0000644000175000017500000000000611542263760014703 00000000000000db '' yasm-1.3.0/libyasm/tests/jmpsize1.asm0000644000175000017500000000210311542263760014455 00000000000000jmp 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 yasm-1.3.0/libyasm/tests/times0.hex0000644000175000017500000000000011542263760014112 00000000000000yasm-1.3.0/libyasm/tests/opt-align1.asm0000644000175000017500000000013611542263760014672 00000000000000je label1 times 4 nop je label1 align 8 times 118 nop je label2 label1: times 128 nop label2: yasm-1.3.0/libyasm/tests/reserve-err1.errwarn0000644000175000017500000000013311542263760016136 00000000000000-:7: error: multiple expression not absolute -:14: error: multiple expression not absolute yasm-1.3.0/libyasm/tests/value-samesym.hex0000644000175000017500000000004011542263760015505 0000000000000067 66 89 80 00 fc ff ff yasm-1.3.0/libyasm/tests/opt-circular1-err.errwarn0000644000175000017500000000005011542263760017065 00000000000000-:1: error: circular reference detected yasm-1.3.0/libyasm/tests/opt-align3.hex0000644000175000017500000000210011542263760014671 000000000000000f 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 yasm-1.3.0/libyasm/tests/duplabel-err.errwarn0000644000175000017500000000024411542263760016175 00000000000000-:16: error: redefinition of `label' -:12: error: `label' previously defined here -:18: error: redefinition of `label' -:12: error: `label' previously defined here yasm-1.3.0/libyasm/tests/jmpsize1-err.errwarn0000644000175000017500000000011411542263760016143 00000000000000-:132: error: short jump out of range -:263: error: short jump out of range yasm-1.3.0/libyasm/tests/expr-simplify-identity.asm0000644000175000017500000000012711623775055017363 00000000000000d_key equ 0 cachedata: DQ 0 dtable: cmp al, [esi + (dtable-cachedata) + ebx*4 + d_key] yasm-1.3.0/libyasm/tests/times-res.hex0000644000175000017500000000012011542263760014624 0000000000000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 yasm-1.3.0/libyasm/tests/expr-wide-ident.asm0000644000175000017500000000004211542263760015720 00000000000000lea edx, [lentry+edx+ecx] lentry: yasm-1.3.0/libyasm/tests/1shl0.asm0000644000175000017500000000001211542263760013637 00000000000000dd (1<<0) yasm-1.3.0/libyasm/tests/1shl0.hex0000644000175000017500000000002011542263760013642 0000000000000001 00 00 00 yasm-1.3.0/libyasm/tests/timesover-err.asm0000644000175000017500000000004711542263760015523 00000000000000times 512 db 0 times 01FEh-($-$$) db 0 yasm-1.3.0/libyasm/tests/incbin.hex0000644000175000017500000000013411542263760014163 0000000000000074 69 6d 65 73 74 61 6d 70 20 66 6f 72 20 63 6f 6e 66 69 67 2e 68 0a yasm-1.3.0/libyasm/tests/opt-circular3-err.asm0000644000175000017500000000013311542263760016171 00000000000000label1: times label4-label3+1 db 0 label2: db 0 label3: times label2-label1+1 db 0 label4: yasm-1.3.0/libyasm/tests/value-mask.errwarn0000644000175000017500000000006011542263760015660 00000000000000-:1: warning: value does not fit in 8 bit field yasm-1.3.0/libyasm/tests/opt-align1.hex0000644000175000017500000000205011542263760014673 000000000000000f 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 yasm-1.3.0/libyasm/tests/leb128_test.c0000644000175000017500000001436111626275017014423 00000000000000/* * * 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; } yasm-1.3.0/libyasm/tests/value-samesym.errwarn0000644000175000017500000000010511542263760016403 00000000000000-:1: warning: binary object format does not support extern variables yasm-1.3.0/libyasm/tests/externdef.asm0000644000175000017500000000002011542263760014673 00000000000000extern foo foo: yasm-1.3.0/libyasm/tests/opt-immnoexpand.hex0000644000175000017500000000202411542263760016040 0000000000000090 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 yasm-1.3.0/libyasm/tests/duplabel-err.asm0000644000175000017500000000017111542263760015274 00000000000000%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 yasm-1.3.0/libyasm/tests/reserve-err2.errwarn0000644000175000017500000000047111542263760016144 00000000000000-: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 yasm-1.3.0/libyasm/tests/charconst64.asm0000644000175000017500000000003711542263760015055 00000000000000[bits 64] mov rax, '12345678' yasm-1.3.0/libyasm/bc-data.c0000644000175000017500000004627311626275017012527 00000000000000/* * 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; } } } yasm-1.3.0/libyasm/hamt.h0000644000175000017500000001164111626275017012161 00000000000000/** * \file libyasm/hamt.h * \brief Hash Array Mapped Trie (HAMT) 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: * 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_HAMT_H #define YASM_HAMT_H #ifndef YASM_LIB_DECL #define YASM_LIB_DECL #endif /** Hash array mapped trie data structure (opaque type). */ typedef struct HAMT HAMT; /** Hash array mapped trie entry (opaque type). */ typedef struct HAMTEntry HAMTEntry; /** Create new, empty, HAMT. error_func() is called when an internal error is * encountered--it should NOT return to the calling function. * \param nocase nonzero if HAMT should be case-insensitive * \param error_func function called on internal error * \return New, empty, hash array mapped trie. */ YASM_LIB_DECL HAMT *HAMT_create(int nocase, /*@exits@*/ void (*error_func) (const char *file, unsigned int line, const char *message)); /** Delete HAMT and all data associated with it. Uses deletefunc() to delete * each data item. * \param hamt Hash array mapped trie * \param deletefunc Data deletion function */ YASM_LIB_DECL void HAMT_destroy(/*@only@*/ HAMT *hamt, void (*deletefunc) (/*@only@*/ void *data)); /** Insert key into HAMT, associating it with data. * If the key is not present in the HAMT, inserts it, sets *replace to 1, and * returns the data passed in. * If the key is already present and *replace is 0, deletes the data passed * in using deletefunc() and returns the data currently associated with the * key. * If the key is already present and *replace is 1, deletes the data currently * associated with the key using deletefunc() and replaces it with the data * passed in. * \param hamt Hash array mapped trie * \param str Key * \param data Data to associate with key * \param replace See above description * \param deletefunc Data deletion function if data is replaced * \return Data now associated with key. */ YASM_LIB_DECL /*@dependent@*/ void *HAMT_insert(HAMT *hamt, /*@dependent@*/ const char *str, /*@only@*/ void *data, int *replace, void (*deletefunc) (/*@only@*/ void *data)); /** Search for the data associated with a key in the HAMT. * \param hamt Hash array mapped trie * \param str Key * \return NULL if key/data not present in HAMT, otherwise associated data. */ YASM_LIB_DECL /*@dependent@*/ /*@null@*/ void *HAMT_search(HAMT *hamt, const char *str); /** Traverse over all keys in HAMT, calling function on each data item. * \param hamt Hash array mapped trie * \param d Data to pass to each call to func. * \param func Function to call * \return Stops early (and returns func's return value) if func returns a * nonzero value; otherwise 0. */ YASM_LIB_DECL int HAMT_traverse(HAMT *hamt, /*@null@*/ void *d, int (*func) (/*@dependent@*/ /*@null@*/ void *node, /*@null@*/ void *d)); /** Get the first entry in a HAMT. * \param hamt Hash array mapped trie * \return First entry in HAMT, or NULL if HAMT is empty. */ YASM_LIB_DECL const HAMTEntry *HAMT_first(const HAMT *hamt); /** Get the next entry in a HAMT. * \param prev Previous entry in HAMT * \return Next entry in HAMT, or NULL if no more entries. */ YASM_LIB_DECL /*@null@*/ const HAMTEntry *HAMT_next(const HAMTEntry *prev); /** Get the corresponding data for a HAMT entry. * \param entry HAMT entry (as returned by HAMT_first() and HAMT_next()) * \return Corresponding data item. */ YASM_LIB_DECL void *HAMTEntry_get_data(const HAMTEntry *entry); #endif yasm-1.3.0/libyasm/compat-queue.h0000644000175000017500000005362511626275017013645 00000000000000/* * 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 */ yasm-1.3.0/libyasm/floatnum.c0000644000175000017500000006073011626275017013053 00000000000000/* * 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"); } yasm-1.3.0/libyasm/bytecode.c0000644000175000017500000002616411626275017013027 00000000000000/* * 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; } yasm-1.3.0/libyasm/section.c0000664000175000017500000014015112371736130012664 00000000000000/* * 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); } yasm-1.3.0/libyasm/expr.h0000664000175000017500000003527712371744440012222 00000000000000/** * \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 yasm-1.3.0/libyasm/Makefile.inc0000644000175000017500000000542611626275017013273 00000000000000libyasm_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 yasm-1.3.0/libyasm/valparam.h0000644000175000017500000003703211626275017013035 00000000000000/** * \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 yasm-1.3.0/libyasm/expr.c0000644000175000017500000013601511626275017012204 00000000000000/* * 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; } yasm-1.3.0/libyasm/bc-align.c0000644000175000017500000002003111626275017012670 00000000000000/* * 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); } yasm-1.3.0/libyasm/dbgfmt.h0000644000175000017500000001071611626275017012475 00000000000000/** * \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 yasm-1.3.0/libyasm/strsep.c0000644000175000017500000000617311626275017012547 00000000000000/* * 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@*/ yasm-1.3.0/libyasm/assocdat.c0000664000175000017500000000775512333771162013037 00000000000000/* * 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*/ } yasm-1.3.0/libyasm/CMakeLists.txt0000664000175000017500000000241112372053130013601 00000000000000SET(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 ) yasm-1.3.0/libyasm/hamt.c0000644000175000017500000003343211626275017012156 00000000000000/* * Hash Array Mapped Trie (HAMT) implementation * * Copyright (C) 2001-2007 Peter Johnson * * Based on the paper "Ideal Hash Tries" by Phil Bagwell [2000]. * One algorithmic change from that described in the paper: we use the LSB's * of the key to index the root table and move upward in the key rather than * use the MSBs as described in the paper. The LSBs have more entropy. * * 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" 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)< #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 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; i #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; } } yasm-1.3.0/libyasm/bytecode.h0000664000175000017500000006306312371744440013034 00000000000000/** * \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 yasm-1.3.0/libyasm/md5.h0000644000175000017500000000200611626275017011710 00000000000000/* 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 */ yasm-1.3.0/libyasm/symrec.c0000644000175000017500000005053111626275017012526 00000000000000/* * 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); } yasm-1.3.0/libyasm/module.h0000644000175000017500000000611211626275017012512 00000000000000/* * 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 yasm-1.3.0/libyasm/linemap.h0000644000175000017500000001324411626275017012656 00000000000000/** * \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 yasm-1.3.0/libyasm/phash.h0000644000175000017500000000127511626275017012335 00000000000000/* 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); yasm-1.3.0/libyasm/intnum.h0000644000175000017500000002712411626275017012545 00000000000000/** * \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 yasm-1.3.0/libyasm/md5.c0000664000175000017500000002505612333771162011715 00000000000000/* * 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 */ yasm-1.3.0/libyasm/phash.c0000664000175000017500000002247112371621045012325 00000000000000/* 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; } yasm-1.3.0/libyasm/xstrdup.c0000644000175000017500000000452211626275017012734 00000000000000/* * 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); } yasm-1.3.0/libyasm/bc-org.c0000644000175000017500000001150511626275017012373 00000000000000/* * 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); } yasm-1.3.0/libyasm/listfmt.h0000644000175000017500000001111711626275017012710 00000000000000/** * \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 yasm-1.3.0/libyasm/preproc.h0000644000175000017500000002123411642251313012670 00000000000000/** * \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 yasm-1.3.0/libyasm/objfmt.h0000644000175000017500000002116011626275017012506 00000000000000/** * \file libyasm/objfmt.h * \brief YASM object format 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: * - 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_OBJFMT_H #define YASM_OBJFMT_H #ifndef YASM_DOXYGEN /** Base #yasm_objfmt structure. Must be present as the first element in any * #yasm_objfmt implementation. */ typedef struct yasm_objfmt_base { /** #yasm_objfmt_module implementation for this object format. */ const struct yasm_objfmt_module *module; } yasm_objfmt_base; #endif /** Object format module interface. */ struct yasm_objfmt_module { /** One-line description of the object format. */ const char *name; /** Keyword used to select object format. */ const char *keyword; /** Default output file extension (without the '.'). * NULL means no extension, with no '.', while "" includes the '.'. */ /*@null@*/ const char *extension; /** Default (starting) x86 BITS setting. This only appies to the x86 * architecture; other architectures ignore this setting. */ const unsigned char default_x86_mode_bits; /** If @ signs should be legal in identifiers. */ const unsigned char id_at_ok; /** NULL-terminated list of debug format (yasm_dbgfmt) keywords that are * valid to use with this object format. The null debug format * (null_dbgfmt, "null") should always be in this list so it's possible to * have no debug output. */ const char **dbgfmt_keywords; /** Default debug format keyword (set even if there's only one available to * use). */ const char *default_dbgfmt_keyword; /** NULL-terminated list of directives. NULL if none. */ /*@null@*/ const yasm_directive *directives; /** NULL-terminated list of standard macro lookups. NULL if none. */ const yasm_stdmac *stdmacs; /** Create object format. * Module-level implementation of yasm_objfmt_create(). * Call yasm_objfmt_create() instead of calling this function. * \param object object * \param a architecture in use * \return NULL if architecture/machine combination not supported. */ /*@null@*/ /*@only@*/ yasm_objfmt * (*create) (yasm_object *object); /** Module-level implementation of yasm_objfmt_output(). * Call yasm_objfmt_output() instead of calling this function. */ void (*output) (yasm_object *o, FILE *f, int all_syms, yasm_errwarns *errwarns); /** Module-level implementation of yasm_objfmt_destroy(). * Call yasm_objfmt_destroy() instead of calling this function. */ void (*destroy) (/*@only@*/ yasm_objfmt *objfmt); /** Module-level implementation of yasm_objfmt_add_default_section(). * Call yasm_objfmt_add_default_section() instead of calling this function. */ yasm_section * (*add_default_section) (yasm_object *object); /** Module-level implementation of yasm_objfmt_init_new_section(). * Call yasm_objfmt_init_new_section() instead of calling this function. */ void (*init_new_section) (yasm_section *section, unsigned long line); /** Module-level implementation of yasm_objfmt_section_switch(). * Call yasm_objfmt_section_switch() instead of calling this function. */ /*@observer@*/ /*@null@*/ yasm_section * (*section_switch)(yasm_object *object, yasm_valparamhead *valparams, /*@null@*/ yasm_valparamhead *objext_valparams, unsigned long line); /** Module-level implementation of yasm_objfmt_get_special_sym(). * Call yasm_objfmt_get_special_sym() instead of calling this function. */ /*@observer@*/ /*@null@*/ yasm_symrec * (*get_special_sym)(yasm_object *object, const char *name, const char *parser); }; /** Create object format. * \param module object format module * \param object object * \return NULL if architecture/machine combination not supported. */ /*@null@*/ /*@only@*/ yasm_objfmt *yasm_objfmt_create (const yasm_objfmt_module *module, yasm_object *object); /** Write out (post-optimized) sections to the object file. * This function may call yasm_symrec_* functions as necessary (including * yasm_symrec_traverse()) to retrieve symbolic information. * \param object object * \param f output object file * \param all_syms if nonzero, all symbols should be included in * the object file * \param errwarns error/warning set * \note Errors and warnings are stored into errwarns. */ void yasm_objfmt_output(yasm_object *object, FILE *f, int all_syms, yasm_errwarns *errwarns); /** Cleans up any allocated object format memory. * \param objfmt object format */ void yasm_objfmt_destroy(/*@only@*/ yasm_objfmt *objfmt); /** Add a default section to an object. * \param object object * \return Default section. */ yasm_section *yasm_objfmt_add_default_section(yasm_object *object); /** Initialize the object-format specific portion of a section. Called * by yasm_object_get_general(); in general should not be directly called. * \param section section * \param line virtual line (from yasm_linemap) */ void yasm_objfmt_init_new_section(yasm_object *object, unsigned long line); /** Switch object file sections. The first val of the valparams should * be the section name. Calls yasm_object_get_general() to actually get * the section. * \param object object * \param valparams value/parameters * \param objext_valparams object format-specific value/parameters * \param line virtual line (from yasm_linemap) * \return NULL on error, otherwise new section. */ /*@observer@*/ /*@null@*/ yasm_section *yasm_objfmt_section_switch (yasm_object *object, yasm_valparamhead *valparams, /*@null@*/ yasm_valparamhead *objext_valparams, unsigned long line); /** Get a special symbol. Special symbols are generally used to generate * special relocation types via the WRT mechanism. * \param object object * \param name symbol name (not including any parser-specific prefix) * \param parser parser keyword * \return NULL if unrecognized, otherwise special symbol. */ /*@observer@*/ /*@null@*/ yasm_symrec *yasm_objfmt_get_special_sym (yasm_object *object, const char *name, const char *parser); #ifndef YASM_DOXYGEN /* Inline macro implementations for objfmt functions */ #define yasm_objfmt_create(module, object) module->create(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 yasm-1.3.0/libyasm/arch.h0000644000175000017500000005106011626275017012144 00000000000000/** * \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 yasm-1.3.0/libyasm/inttree.h0000644000175000017500000000436211626275017012704 00000000000000#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 yasm-1.3.0/libyasm/file.h0000644000175000017500000004630211626275017012151 00000000000000/** * \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 yasm-1.3.0/libyasm/file.c0000644000175000017500000004434311626275017012147 00000000000000/* * 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; } yasm-1.3.0/libyasm/bitvect.c0000644000175000017500000035224611626275017012674 00000000000000#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 */ /* */ /*****************************************************************************/ yasm-1.3.0/libyasm/value.h0000644000175000017500000001676611626275017012361 00000000000000/** * \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 yasm-1.3.0/libyasm/errwarn.c0000644000175000017500000003351411626275017012706 00000000000000/* * 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); } yasm-1.3.0/libyasm/parser.h0000644000175000017500000000544211626275017012526 00000000000000/** * \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 yasm-1.3.0/libyasm/floatnum.h0000644000175000017500000001223611626275017013056 00000000000000/** * \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 yasm-1.3.0/libyasm/valparam.c0000644000175000017500000002527011626275017013031 00000000000000/* * 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; } yasm-1.3.0/libyasm/bc-reserve.c0000644000175000017500000001206211626275017013256 00000000000000/* * 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; } yasm-1.3.0/libyasm/coretype.h0000644000175000017500000003667011626275017013073 00000000000000/** * \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 yasm-1.3.0/libyasm/insn.c0000644000175000017500000002161111626275017012170 00000000000000/* * Mnemonic instruction 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 "expr.h" #include "value.h" #include "bytecode.h" #include "insn.h" #include "arch.h" void yasm_ea_set_segreg(yasm_effaddr *ea, uintptr_t segreg) { if (!ea) return; if (segreg != 0 && ea->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; } } } yasm-1.3.0/libyasm/assocdat.h0000644000175000017500000000560311626275017013032 00000000000000/** * \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 yasm-1.3.0/util.h0000644000175000017500000001162311626275017010545 00000000000000/* * 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 yasm-1.3.0/plugins/0000775000175000017500000000000012372060147011152 500000000000000yasm-1.3.0/plugins/dbg/0000775000175000017500000000000012372060147011706 500000000000000yasm-1.3.0/plugins/dbg/init_plugin.c0000644000175000017500000000037011542263760014315 00000000000000#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); } yasm-1.3.0/plugins/dbg/CMakeLists.txt0000644000175000017500000000227411542263760014375 00000000000000PROJECT(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}) yasm-1.3.0/plugins/dbg/README0000644000175000017500000000073211542263760012512 00000000000000This 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. yasm-1.3.0/plugins/dbg/dbg-objfmt.c0000644000175000017500000001347211542263760014016 00000000000000/* * 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 }; yasm-1.3.0/plugins/x86/0000775000175000017500000000000012372060147011577 500000000000000yasm-1.3.0/plugins/x86/init_plugin.c0000644000175000017500000000036211542263760014207 00000000000000#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); } yasm-1.3.0/plugins/x86/CMakeLists.txt0000644000175000017500000000712011542263760014261 00000000000000PROJECT(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}) yasm-1.3.0/plugins/x86/README0000644000175000017500000000070711542263760012405 00000000000000This 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 ... yasm-1.3.0/plugins/README0000644000175000017500000000147511542263760011763 00000000000000These 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. yasm-1.3.0/INSTALL0000644000175000017500000001722711542263760010455 00000000000000Basic 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. yasm-1.3.0/configure0000775000175000017500000117061212372060127011326 00000000000000#! /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 yasm-1.3.0/yasm_dbgfmts.70000664000175000017500000000606012334021305012151 00000000000000'\" 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 yasm-1.3.0/NEWS0000644000175000017500000000000011542263760010100 00000000000000yasm-1.3.0/version0000664000175000017500000000000612372060147011015 000000000000001.3.0 yasm-1.3.0/tools/0000775000175000017500000000000012372060147010631 500000000000000yasm-1.3.0/tools/genperf/0000775000175000017500000000000012372060147012257 500000000000000yasm-1.3.0/tools/genperf/perfect.h0000664000175000017500000001307712335722632014013 00000000000000/* ------------------------------------------------------------------------------ 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 */ yasm-1.3.0/tools/genperf/perfect.c0000664000175000017500000011703712335722632014007 00000000000000/* 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 yasm-1.3.0/tools/genperf/Makefile.inc0000664000175000017500000000314312335722632014413 00000000000000# 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 yasm-1.3.0/tools/genperf/CMakeLists.txt0000664000175000017500000000032412335722632014741 00000000000000add_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=) yasm-1.3.0/tools/genperf/standard.h0000664000175000017500000000162412335722632014156 00000000000000/* ------------------------------------------------------------------------------ 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 */ yasm-1.3.0/tools/genperf/genperf.c0000664000175000017500000004246612371621045014004 00000000000000/* * * 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; } yasm-1.3.0/tools/re2c/0000775000175000017500000000000012372060147011464 500000000000000yasm-1.3.0/tools/re2c/examples/0000775000175000017500000000000012372060146013301 500000000000000yasm-1.3.0/tools/re2c/examples/cmmap.re0000644000175000017500000001224611542263760014656 00000000000000#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); } } yasm-1.3.0/tools/re2c/examples/rexx/0000775000175000017500000000000012372060146014267 500000000000000yasm-1.3.0/tools/re2c/examples/rexx/README0000644000175000017500000000010711542263760015070 00000000000000Replacement modules for an existing REXX interpreter. Not standalone. yasm-1.3.0/tools/re2c/examples/rexx/scanio.c0000644000175000017500000000234211542263760015633 00000000000000uchar *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; } yasm-1.3.0/tools/re2c/examples/rexx/rexx.l0000644000175000017500000001256311542263760015364 00000000000000#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; } */ } yasm-1.3.0/tools/re2c/examples/c.re0000644000175000017500000001250511542263760014001 00000000000000#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); } yasm-1.3.0/tools/re2c/examples/modula.re0000644000175000017500000001135011542263760015035 00000000000000#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); */ } } yasm-1.3.0/tools/re2c/examples/repeater.re0000644000175000017500000000133511542263760015365 00000000000000#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"); } yasm-1.3.0/tools/re2c/examples/cunroll.re0000644000175000017500000001174311542263760015240 00000000000000#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); } yasm-1.3.0/tools/re2c/examples/basemmap.c0000644000175000017500000000076311542263760015163 00000000000000#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); } } yasm-1.3.0/tools/re2c/examples/sample.re0000644000175000017500000000021311542263760015031 00000000000000/*!re2c "print" {return PRINT;} [a-z]+ {return ID;} [0-9]+ {return DEC;} "0x" [0-9a-f]+ {return HEX;} [\000-\377] {return ERR;} */ yasm-1.3.0/tools/re2c/examples/cnokw.re0000644000175000017500000001074511542263760014704 00000000000000#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); } yasm-1.3.0/tools/re2c/examples/simple.re0000644000175000017500000000033611542263760015047 00000000000000#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;} */ } yasm-1.3.0/tools/re2c/translate.c0000644000175000017500000001011311542263760013543 00000000000000#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 }; yasm-1.3.0/tools/re2c/basics.h0000644000175000017500000000037311542263760013026 00000000000000#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 yasm-1.3.0/tools/re2c/parse.h0000644000175000017500000000104011542263760012664 00000000000000#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 yasm-1.3.0/tools/re2c/parser.c0000644000175000017500000001124311542263760013047 00000000000000#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)); } } yasm-1.3.0/tools/re2c/dfa.h0000644000175000017500000000657511542263760012326 00000000000000#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 yasm-1.3.0/tools/re2c/re2c.10000644000175000017500000003641411542263760012333 00000000000000.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 yasm-1.3.0/tools/re2c/Makefile.inc0000644000175000017500000000734711626275017013632 00000000000000# 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 yasm-1.3.0/tools/re2c/dfa.c0000644000175000017500000001222011542263760012301 00000000000000#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; } yasm-1.3.0/tools/re2c/re.h0000644000175000017500000000661711542263760012177 00000000000000#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 yasm-1.3.0/tools/re2c/CMakeLists.txt0000644000175000017500000000022111542263760014141 00000000000000add_executable(re2c main.c code.c dfa.c parser.c actions.c scanner.c mbo_getopt.c substr.c translate.c ) yasm-1.3.0/tools/re2c/main.c0000644000175000017500000001026711542263760012504 00000000000000#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; } yasm-1.3.0/tools/re2c/bootstrap/0000775000175000017500000000000012372060146013500 500000000000000yasm-1.3.0/tools/re2c/bootstrap/scanner.c0000644000175000017500000003560511542263760015231 00000000000000/* 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); } yasm-1.3.0/tools/re2c/scanner.h0000644000175000017500000000150111542263760013205 00000000000000#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 yasm-1.3.0/tools/re2c/token.h0000644000175000017500000000077411542263760012707 00000000000000#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 yasm-1.3.0/tools/re2c/scanner.c0000644000175000017500000003561711542263760013217 00000000000000/* 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); } yasm-1.3.0/tools/re2c/actions.c0000644000175000017500000003465411542263760013226 00000000000000#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); } yasm-1.3.0/tools/re2c/code.c0000664000175000017500000005174612333771162012502 00000000000000#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); } yasm-1.3.0/tools/re2c/NO_WARRANTY0000644000175000017500000000021611542263760013173 00000000000000re2c is distributed with no warranty whatever. The author and any other contributors take no responsibility for the consequences of its use. yasm-1.3.0/tools/re2c/mbo_getopt.c0000755000175000017500000000620711542263760013721 00000000000000/* 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 */ } yasm-1.3.0/tools/re2c/scanner.re0000644000175000017500000001260111542263760013367 00000000000000#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); } yasm-1.3.0/tools/re2c/ins.h0000644000175000017500000000103111542263760012343 00000000000000#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 yasm-1.3.0/tools/re2c/README0000644000175000017500000001171211542263760012270 00000000000000re2c ---- 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. yasm-1.3.0/tools/re2c/mbo_getopt.h0000755000175000017500000000101311542263760013714 00000000000000/* 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 yasm-1.3.0/tools/re2c/substr.h0000644000175000017500000000316411542263760013105 00000000000000#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 yasm-1.3.0/tools/re2c/substr.c0000644000175000017500000000206111542263760013073 00000000000000#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); } yasm-1.3.0/tools/re2c/parser.h0000644000175000017500000000073111542263760013054 00000000000000#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 yasm-1.3.0/tools/re2c/doc/0000775000175000017500000000000012372060146012230 500000000000000yasm-1.3.0/tools/re2c/doc/loplas.ps.gz0000644000175000017500000020673011542263760014440 00000000000000‹><¯-paper.psìý}wãF’&ŽþOÁßnÏ]iÆUÂг[§HèõŽíöº<==kûÌeI”D%Ê$eWµnÝÏ~ãyžH¤Tn{¶zúî9k—$2####ã=ÿîÿùêÕ³éÅæõòYú<Žþîïêír±ßl?]ü´ºÛ½ŸÓb1ª7wï¶««ëý(™TÅ'ö{’¾^\¬ÎëQón9zµ¹Üÿ¼Ø.­‰oVûõòÓÑÝân¹}nÍØ­¯WËݧ£¤ðÏØ^,­éî|y{a÷f›ûÛ‹ÕíÕlóöÓQlÿI:*'©}ÕÜ^Ô›››åí~ýÝüŸ}õ —‹Û‹ÏW·KsôlãÝÙg~ðG¿Zl7Ëýrk_Ü­þ[ÇŸŒÎ77wÛån·¼àg6=Ú.o6?-/ü½W›ûí¹µ>úfù§Ñæ~wOòçqþ<š&ÉP/¯V·_m7篖ûOGûåÛóçwÛMtf/ÍWçûQ:ŽGøp±¼…›¯ñÒèìË»ù_œÍ^¯n/ðÐû/Gg¯¬ë÷_Fgzx5úòýltöÍ×ûíâv·^ì—xdµ[ïF—‹õn9²«Ÿv«?/GI2*ÓÑÍý·®y«z>¶{‘ß[ÊîÖ÷»IüÀWÕ÷K›ÔÕíZ|ø6 JFÏ’÷Ï’Qò>Z].Ñ&&þþ|s{¾Ø¿_]¢Ã¯—»Íú~¿ÚÜÚHÂ?ݺ]^vF%ˈ z>i/âaÇ#¢áaðÌ3=]÷½wȾùð ž¶­FýíQ2Z\\àí蛯G7‹ývõvt~¿ÝøÕÅýòÑÕr?Ú‚4í3ÀÂ×c|éëqÿõnéí`¦^b¸6ú»åƒfm¿½_jR_ ß/Ö—ËåÅC´Û/ö÷;ÒÊY_O[£|þ|s·ZîÎþ³>Œþ„»í‹ý· gƦ*Žâï­×v6û6öÙ²ËÛ[ûd?kô÷|¿Õ‡‹ËgûÅjý€'*Qê—£ÛÛÈI´ÝÜî¿yw·exW_A—·ûíÛpofkvd=Úõξ½½½^Ø”ü)Zl·‹wFÞ+{ÏÖåŸìãýj}Q_/¶øÅ«åxjnÏ7Xÿ#ƒñËÑ«áþîáìr³‰ Ÿ—ÖÍût¤ölôöë'ô¿Þ,.l$=Æõ-ðrqùp¶»´É¶Æ nLÙ•YÏì@xðOþØ·öˆ³? \apðNóÝmîÐ%É`yiLà˜öÌùõ³ŸWûëûp±Ø/øèzy{µ¿6BÙÝ¿á¼ôäõ\õ©GóîQ=ùvsyù¤ÕhðläÏfáYüõçßáù'ÚM»g“´Ôóž¿xûÔÓÉ«cßîD¢3Í=>â0ès‚­º/m•¢Õ…pû³ÿ=×ß«»Hz§ëßëçÄþˆæa·ø „™Øú\¯G¯‰ý¦‘qÔå[~~Õ“ .˜àO#Ìg·&ˆûäøŽ£n¦ˆÿvfšƒ %œ/ί—ËŸVç˨{¦o˺_´Ïž']ƒÞ8ÛyNœ}oÈŠÞg]“%;®F+±¯¾tŽè|ˆxßfÇþjZñäŸFÛŸß?üÞ9é{ös³°ß¶H–˜¯ß?<Ø”YsàxhÖþùŒñI5ºÙ\j‡åníx^¾]ž¿_o6whfqñÓƒÁ‚÷ ¦èO"©« én¤òQ7s«[Û¸2ùÂVw÷Ý]yö׸ÌÅOhçöâ!5·|»"Á®w×Þz*ƘЄm/?>`æmÃ:JÇãp'ç¼Ççо36ŽáñïfÛ!K»¥ƒÁ¢Þþå>ÓJ= zµµè÷ˆÁèžúKÝëm×›0':ˆ†Hóg2ýÙËÕz½#Éÿ|ô†l‚Îbƒ!)|Œ ಡ¼¿ÜlAuwëoìí¨ûê}ÔÝ^¼H|Í\ >ò „K´xöê³ùé—#ɃXäáýftöÇKIIGÛÆ(ÅÃ[`y>™ŒÖû‡³ÿùG›¦¯ÿ¨˜›7dPÌnØ^Ä‹sžÑîzó󱣨ÅòpË~·LŽÚîƒæ5ŸˆôBƒ¨ëŠŠ&\%q÷g¦g4~1*.|Éu`Ôÿ`·Á |uh½g>˜²óŸ(¦€¶¢b\VÉó²PÓ’Oÿ4:¼+)÷OÖÝ0O_?%îÍæÛñŠx¸ܯ—o}oµïôñ§¿úSxâO£?‚Rþ=àÏ× Q—M£¹¸·ËŸ¯—Û%—K¸3J›õ‡xTFC6bߟÌW»»õâÝéòÇ@ùÕœ|¹üÓ7øÒ˜Û–jâ Ç{×TœbL,|x¸"¡šèŽm?ö1Þ¡bŒ4*2’‚Œ=Cƒí*lmïŸnoØŠÚE¿¦=‡Ôpù?ÿ¨¦#jn6é7®I ƒ«þ_qaò¶k.í:Ž4kHÃ==#5ÜîaÁ~û )ì.×û…¤+Êü”—xÓˆÀÚèŸüÂÔNˆ¶ø ë7ˆ¾¯yŸW”]žå£/ØôóLŸ–ÏR}º„æÈOWFüpýàwVþБ¿øæÁÛúùá–õÃÝȺùŸoð9Óç[|NõyópYgül{éÈ?nÀFùqgýÅýD ~|k]½vöà¤(mç 5…ëÕ+玢ݱ=–eÀhn/ÜðÈ.°»[ž¯kšŽŒ¯d&ˆã |½~ûò•Þœ//÷ë½Ar½£aäËÈxÌ#Ôõ7¾¸ýïõî\jÏOá»5äçÏ?û*Þ«WËåmÔ¶×¼Ñ[Ö˽-Ñ0ÛÍ~É‹œÖË«ÅÚ>AoxÉõq»ÚƒWâÅ—×¼õ0øÆùÙ¹TÖ—??9 õq´r ×™Ò7?=þæ|½º{ˆt/õ{×&FCæ޼ëpç§pÇc°Gºa¨yˆçúvAf)t µwCØC÷Ôµžº>|ʰ³^¿}8³_Þözý—ïüò~kßÚ¯îò.ý[ã.2›°9l”P‹Ï^~±Yýópk¿¹ðíðàöaéf¸EÅdÍî™=„X†û·xë÷Œ©£¥›‹¡”’êA6BÙ†«•À³'xŸ¢'œÈ>n.öoï6;°V5öoÑ ¨hßòö÷hß3\¸ .· °z¿vRænÇÍ‹D›Æ"~ÙÙ¦ºM&l!¹H=¥ﻪQt å•o‰O|è6§Ñ9×°ïÁ¾ÁbH·NiŽˆ­_g/IY.?PÖ ¾uñ^ Oif¿DrDz6J.ô׈ãBŸø´m«âüÈK[GJôࢤÉGa ˆÉ¡eldÂg¸°oT°èUX¯&zš¬i,ò/D\ ò¦s=. kbBm’£@.R>@ÂÄ$h•ÖÂFˆ7 žÒžcòÍ/41`y_íÙläBõ;x:†ö»@0¸dWºÄÃv=IN´?ýÊ(Óg¤(I“ì³ncŸ~¿]Þ-¦þ¢(¿ö§‚Ö<Òa¸‡çУ-ÍÚ£$~y¹ì ÁãP]W.dB]?lWçÛ ýA™…â‚ÿtÄîpï_Œ¿„}c¹Gç‹nŠË?ìöÛÍïGz£_™—¦éÓ, æ¿^®!Œ˜o0S‚}‹;‡_™R¼µ=Õþ¾õ¿X”.£?iü´Ž‡#¾)êŠi%4Üõ·ØžM§ëCå9Óq•gÉhœÆ“I’2ÖeþsÒ…œF2 ŽÎÚÅ(71 µ ÷ò¿&i'iOÓÄD$Mâif_ñwn×Uçq]Ϊ,ž¿Èóh~ðFoóðm1²o³8›fù¤l¦)~Ûõlš6³$i¬Íf–Æx3ŸDöU^VzhšeUœ´mÛ4³8¶'ã8M²¤­ðhe÷ÊŠÝÅ5¾Mò:Î&­}›µmÙyÙLê4}QŒ ‚Ù8IíÊ:²÷’<©íÇ^ŠñÓNs}Jš±Ýo­që6F·QVã¦Voö7«ãéX×É8ŽñBV£ù6N¦I]Î'6œŸý× {kb›û«·7Ïìž'àâÂÐùZâÜ€+âñ4±©3äW˜€Ø 6(â©á åá«ÌPUy\6l(¯â¢6¸­9練¿1:·»M2K±N“È`| +q™Œ+t—Ù ­Cñ¸a÷ÉØf©Â•Ý32HÆuÜÔÞ'f P!µ¬Ð°½T;>RôU´µzŠ[´ÎÉSOl/>Ä ‰M¢þòÎ8w*\Ù…fýÅ-˜OÚ‘†Õ6ꌓlˆ‰Sío¢ ë‰ÞrT–mÔL ª¤ò¦ŸÔ¤­¾ñ©4ê€h Žsê3™8e-Ú-LhþxB‹¦.­ ÏžÅ<ÙJéçÖ–ƒ5b?˜Ý ½·Ê((Fÿ‚0Y_sŸÜÌ@ÅbhcüأĺõWOâÙ8jA"vc:ï:˜+ ŽK ´ƒAdFâ™xAkpÙuÕLKûcÛb5›il/%‰-= ¬zQæ¶ôÔ‡5X9 %ÈÆg/×ã:Â"2þa’O !µ ÔúˆKñФ4aË®™å¶`-ÀocÐNYUü ¶Zäª4º5"U¿àFð¢Y¨“½ÍHNªI$Ud Úr°žŒÌÆÖBáDPƒ’s¬±¬åâ5Ö€Užr-µཬ˜cÛôKp fª$s°1ØkXÇFÑw3ÇFj ¼†3å˜1“ù¤¨‰ç‰a#›buf˜I`9á¹°–R`:?°öš‚P' ù²Ö-g5îfsûi¨ýmÊ÷°.Mˆ±À|ƒ[1>aF* #úˆ°-%š)¹ÍÀN¦x‘mïˆ /Aô²Ku†%´O¸›Ú[ ¸tbË´l'¹Û¤´Áui«Ó$ƒÀú«¹OV˜–»V&N4ïµñTÍM-’ÀÆÕJϼ“ ,yÖÖ)^,«”2RÃe<¥¨d£€iž#îAÚ=Ç. q_Å&$!Q›ãB²y¨Ù_ÃAi ˆCJn,¹¦ÔïjZ†Ï3b>U¢E®GS”LëU9#wHEÖop2Ì#žÊb}“òpŨàÚu|%Üu’Ê߀¤( Ä‘Ľ"­ÐÑ£lÈ Ml0F5‹^³ÄþmS†œ]„£e×Ét¾ÐPìøˆ£Y¦Ëx¢'L-øLÍf¡Ù†»?…ˆÔöºÖx«È+0¦œòNM’±­«#™É £ ’LbR6,Z[#1v],\-Ú°õcÁ³”²²V;~¥ JL˜L+ç¶©Çà-vË)¦<ž;n(²WÆž±-™¦XR‘Ƚ·"—uYi3'‡™‹LìÁ¢r2š‚|)eH3‰È LÀ­ çÇí`êŒjn‹¤IØšÐV„Æ*í×¥vn»ÎØfÊÍ&©¹69zh¨7hJ‡ä9Ø%žPt Ê0¤ô8ÅÆËV K5¨6™‹«ÇjQí¬Ž´í™¬…m¯Åž' ã·õPs—+¸• É‘³¹j#V öÀ’öµ¯hSáj„ºž8„q“ƒ®„²gŠ[•W³ÜPJUZ(5£³öõ¨%I & ²ÊIaàÚâòX¼2­PåÞŽÛE‚h30â69bžÄÆÜXÒŒª¢=ž&~gxÕZŒðC¯+XoæìÆXEi2ZÛàãŠ<>Ã6`ØÉ'U]ö·‰Ç±M¢-*»šØz¤8j ˜\a˧‚FKÍËæ5›`q˜XCé>™tsƒn.Vã㤜G‰‘ø!¬­ƒ˜ªÎ´âøjª-yÉâ8gÖRj+2áŠÔZÌM»´ß ÔмƒšTxÍ€ÉLîË!Æs·Ýr(q îë}bßV¸cALO@æ´h5„ˆp‰¡6R»ž½oômC±Í)¯9{A \ìa™($E¯3¬†61„¶Ž¦Ìà+GsRÂRÆ“cœ[Ôæ6KÓã*Ò³½JQ“áÅp1ž £SÒ‰ÀÀ MH7N21P`;/K¹y²ç¶lõ±±¥éÈ^UË--n6¹Pül®^äcü`º³Ñe–I1”Bc2<ìÛXåkŽ¡Úð¯d£4.0Qgkøc³†]£Å4Ƴ Ì9| \} Òœ%…ѰÉ]/¢|â&>gGؤb¦!BŒ¨ñ»äµ+“¤ðI#ehвñQ6šÐœa¸4€Š¤x1B :)Kß+iü€9 4#®×‚åÛn0Ë –ŠÔZÚKhð±=cV…Ú–T™®m’öÈqjß5Ð9LØ *ô¶èrĘ,†Íµþ^*榾îí¥0Õ`[×V>M ÍcŠ6_ _|£ÇhF @ÅjEbœ”[˜1ÑJ¦í Bûãv ˆš8vzEûx!ù@Û‘3.×ÁS豉Ÿ’§ã@v~=·Ù¶›™9T“VRh„^ZŸ ãS(ÒaK.<$cÁSRúÎOI1İÐnÓ’2È4Y ¹46"À¢Æ†pØíøÙ6¬Ä6™IW6œ°*L_Ûœ ~!k²67ÔÆ40XBm^›¤ì0mù Û(M-ë±æ@NbC¸í àš´f½ÏˆÍÆã †&ºRíóÒ§á:«Ë*pbÖ{²ÁMjmq ¯ M£Žp?¡9á—sïõ—¹ùí ñĦ˜W¦UbYÊm.ð}OŒÉ½È$EçqΩm(©àʘÕÄ0˜Ì€ˆ¤pÈbA­Ä~j_vÏZo¥ˆXcxÞ #áíŒ|j…=S¢¬¥î¶Þ%þ»pŒXB ÑAÆÓ\2Êbv'‚Ù)™·4dbqŒ^É„ÖÑ …ìÙ„›:$nš>H®Ó‚ÛwQ%ÑÖ¬²p »5Úåà°Œ, Á#H$ë”n-¨U669aÒc“±Ü+ -B‰—Õy¾mE–ú¨› ^pk ?À•À¤œ¹U$(ê4£ÅvŸgCy¶D«þ¹–d›x·X+k·îÚ…³z2I³ _Ë”o,KOiæh¦l&q3|ìXꤠÌ繆öÑ#|ð´ó@C䤜DUÀ$ 4èʈ£š42°/Nüy7âƒ=”ßž}×< =ׂ¦×ÿ›Ø£"mâÍJpg¥€w­X*ª@‚áMð¸èˆ¼ uÊN˜ÐVhhhU=°æÃuJªÏZBT2t©áv$®œËÜù;%Ž–`†.YŸ<*d$•Zenƒî;±ÝhKé=PñpíË]DÕ­’¼/Ì]$˜: çM8O$Óœµ‚ÏNLѶÈà ̉*“ÃZ÷Ф¦Ú¸É| Ól$'( ÔOM÷”ïÇv#“^ß„[õÿ=¶`Iòd$¡iA‘P„Z8›zq¶n¤0I­Ó«Â„>£G¬)ð!ÙöŽVFc+cþäãÑñóeüWƒg¨kÁõMŠc™?¡”º™•>(ÕxZº¢QßëaÑ]ŒFp0˜§l=î<Ôò²á¾c\d20gв(£ÔeÓu‚&ÓeW)Ñ'W¼Q`Ë-çZ²ùGÁìQ«*cöÈÞ(jœšxJæÐJ…Ø–¡@^-hŸÔJ+ºyÀjÖ š`rWSkÅ}"Ž)/k J¯”>¸÷UÉ@Ÿ*‚DWМÜ0EÐRi«³Þ•=¢ëÖMÄEñmÝ$CEx¯ Ú)&>ø§š"“ÖØõeéêéX®“Gu‹®Äñ©Ò͆Mç㮲*0CöA…%›a?åä_cýSL¨¢>Në‘M!Ĩ¥ddvÞzläY*Æ[éðhy­@&#Xð“|Œß…ÉP¤i=š„Õ_SÑ€CÚ‡õ‚VlLÁƒC£o®‚Ÿ‹Ž—“h@~òœÔ£Îƒ9Nî…HÐÜ\<š‚(ÄÇ„§zmsZv<+ì;‰Mp’’¶÷&kÜ×5[¥®d½>â›HÅcÚžu$ê´M÷z*Z©%6dá¯Á;7·ÀX¨3qÒ >WÓGdÏ{ÖÊCÇð¥xJ ¿S·)å'ŒËŽM8ÙBÚK£d"Y`-¾£•ǃmTZ9Øžظô~/©æC2V8D TýÒþQcˆˆà^ k>ëñÔ$ i'#"Ú,Ò.Õ?™ÿJôAÊRÀÖ`A0 RUtÐ7¶uôì|~Ú‰úŸh¨@å64Je0ÊÐJØ\hѾT·¦ˆ6¶w`së#ÁÝÁ’Íè¬ô>:¨l—Z²bvßJ8žÕ…€hàR@ÜxÇ5Ȉî‡l Ó¾ÕFR?‰:l7å¬êÛ-«ÐBqÔjÙ·Ê=qÖD@úDK_g…;æÝ¡CX£!°õ!°TÛ` ›ÒhÍ šÄ ¢_g$‘©]Ñu`‹e lNš›G‡ãNÑÎ Ó*!^ÃÜÐ:U¬ó›;Dƒ4$ˆœ&½á0£ë[þ¸´Á¯ŽøÄ˜-$@X‰hPl]›Ê&2…66Ù=?è3]ëj;³Hä^¹ŸÊ>ϵ%i£†v ] ¾„A‚a32Zéæñˆéµ¥Ì 3ì“†ÜØn•S#UÃYÉißdX0U쨂…ÏIã°Ó­0ÍfT…] Õ2èvªqL ä‹ŠÏ¸œx@Wöà,ôü«—&L©¾ƒuBDí o˜‚~;—Åw‚ß ƒ“™ ³.¹`ÓÁÓÇÕµ0"ÝÜ+7}¶g§8̼֖è1oW‘hªq±×>÷š’’b&îDYš¿L,H€*­[î5É“=8šžÇSTº!ÆÅÛÁÎtün|^®DQÍÉf3b?r(¦³À‰ê6VàÓ  H@ê—h’ƒ™®ó¸t3‚¼Ä½ÿ9iÚNõ àƒc¢ÝÃÕìwY|cEðkËH.|—š¿„VOš€†Ô’ÑÃù%7”Ú«¬¡nî½Á HwbÜﻀ7êx&f8è³¾uW0ä®IPÕ}Ÿðùøp •…ž‰GO‡ù;n›ç½yûÇþz”•#6Æ ] z² ”6˜\‘ùW›ŽÀ0¾RvYzðÆ6Ú1ôÉñ¬p—)z°Q˜|ez[“ø^ߺwvTîͰ‘…IñÕ¸O¾,bÑ»|e-~àªÏÙ!gŸ:ÍŒÍN“êE>qÝß]W "kÝRKiÂ~•Œ¹ÎH4OrD¹ç-1'EßÕ¯ 1Ö0ÊUŒ~ V”–4Ú±qÕñÀ1žÉÑʹºi¼³U'ôÞ¥È&/¡¸Æž`3_E¬­Š&@çjiÞ¸-Ðј2—”#Õ‚SÂBYðÿ*wVJEL”а Êl®³Â~Lp²}!P)}×…›ݤÉR@Ghå>WÀ^xú+¶»±»Ì+O5@PuÛ‚@êX©o1£Y˜½Ù0ÓŠIvü ê.3ZO Ó ¥Ò䘉ÌN&µ6Ô$kHŒ Ct¶5ƒ§•=S€¢”qR[iÒ¤ñ³™(† ¦Ô˜€"ׯé+㢛%F{Jk©ì?±—'³!!jBÃ!ÈÅûhÈPá˘%Ji=Ì2%‰àÃsÏŒê$ªãT5½Ú¶×AÞ¢ˆ€0Ed…ŽÚâHB(ÍXô¡ŒQ&ÄZ÷èRüLHIZéæp³)Á«m‹ù˜ –À+œ!Ðïâ9Ü*qMš0Èøk„xÌbn´â ŽL©ÃHö4†¡ŒFdJF¡ii Ø5 r™¦iåÓ5QBRW®"© -ÁjÔèÆ š$ž– g?ŒlÌvú`Œ{®o ‰³^}âZ=C.пêâ©^u<ìI}ÇChbJ8sŸÄ\z¶'TçJãEj„_`¯O¦ãñ<7>½€ºB¾6ˆ1ÉY‹ç¦EÔÌáø`¶0¼­ÜEˆMæ¶µMš8ªriÏÀu[¥bFÜ33Pã4Il\ åÿA6 :rIÏ%PVyÜxt7Yí˜Ñ¥ÙågþS2Pû FË0Aòæ²äž9ëÒÿ"Å”‚KaS ¾Tfæ…¨7¸` ˆgÚýU£Œ„5„–Æ3›ªP#,Ñ`n«¸Ë*I¥/"PŽš=G °òH-  4¸‚mÂC(“dì^¿Rzc±“v:e‚ÅÒE>cÒˆaˆi£ù0ôðÉsx–¹š>섬-)“¹uP'J]’!Z‡‚),sdG4U!»boR+ë†6 ÛºÉ/Œ,*YÕd@õàwK6tP Þ vbÈ(ÂçLÙ.¶Ô‘ƪm$3„”ð2 9µÚ ¹4ôˆ+´±Ò…µÎôín™2ß°8éЪ•NÊž”®@Wr’ùÒ4Á¥“ȲZöܲ*éEžÑ:31)×Å ìIMps fˆ­ò7€°VYi-edžÃ(™¯,Ï\I$ÜL›¸ ¨Nfdôq-C„âÕÁÈ@wZ<9 bÜ‘BKžÃT&x®RH©ãH$Ž‚Ü7후G)f–‘ðrˆÁ³*nÝ;aWk lÕ€¼<‚‰átI#J´Û L©&§Næ Be6ð°g"” Q …PÀºu“ÇÌ,–<ÜÊs‡#†n´žÔZ8dé!1É®ÀÂÇ r1t,{P˜ §j3÷á Åf9ŸTd•.Å'3ðÍ™£„<õR,c¦P‡KðÍaÓ‘)B쉞´Z2)Iù…"˜FóÍ$9!°¦ÂLÓ†È$̹š©8÷¢ùÀw*ÏgêY  ¬bøÀÚ*Yãç6¸†Ã}…df£@6ùgi+ii ’Y6Çn*,¬z0ÊîÍΪAöÒ2­$™C<ÐxhÓ¨@[\Ù¹?B”ÞêX™t*h‡–ÛºÃÊ"©É™’d˜8ͨ-©Ê ú"•ˆìˆ=L¨a?âh'ÌVÓÔ—­/XÅ£0¸‹B`UȘE9¦ŸtÖhÁ¿ ”"Ð4&9©2-fð –)íU1‡ðSP‰Õ ÒXmÕM”-^Î1¡6Æ9—Y”1 )îJ’ƒ¤ßȃÓ:ÍÂ1ñ¤V­"ƒüºÖ êR©qt,11†1V(,Ùw2§-nÂJ 1xKRa­  &òUªÑ‡¼:×ê6fÒµ£Äò‹{…¡ÂLÉÀŒê(Ó|ÇŒF‡ÈªýI>Å4 :3ãŽjç4ËÈuÏJŠÄe Ôê™",$_ä™rª>x™é<~ ,l1HÅìÌó¨”[ÛÌ„š0ìj N*ßnKñ7¼ M©’CQ\{5"/8’QpS:³RÁC¢³ò”=Ž˜‰MÁÃ8…ÈÇeÔ§ ÜÃü&ÙÅŽZ0Õnÿ#Hªt{˜‚ôLTƒà¥u2ï€E†ÚÊcfUapáä¼Ê"ÑhÆ/e¼³)©$ +&e¢XÌÌcß½ìKÑG<ƒ©™Èh"G º4ïò5 »´RÔ±ÇêÎZû¶‰IJ9Õ9-Mã $Qp0ñn}ê÷`Œ,f î«. ÆV mB˜É& ›P¦dßX+Œ0 ìGËIþZ&¥fÌ#é3WŠ8› ‡‘’`Ä—ìf…íl¾?%’×ãØ*¬ÑHu<”.ž(™;« P°9_´˜1 h Š.žbJæŽXº¡$H¨3‚-éˆbÆ2'~€-¨J‚tTHe/Ä ”‹É8D¹:MQ¡`Á…-ò ¬ Ø"Ò®W9U!HÊ#x¼3}Äzmhð'Î{¢3••æ’|V‰Ér=á;TÇʽ®‚'´b™F)Ebæ Îr/— œZ2S–Y¯ö!5(ÍŠN¦®ëµ/ „UMdÊrš —uÁOÖPÚðL$]i17p‹û0Æ)WQ¨¦K»3›€¹Ï*f5ºl»,j˜¢ ŠsJÞ6ÎLS‰Ê©ÁÖ¼( DäUWÁ)fž? na¹Žs§^V]±ó 7 îR­TÊ:#¦^™1,éAĈÊPbk¬!dÈý0v5ë*k1ùDÝס{Ã!3‡Xùí—;WßsöiEã%ÃÊKåc—¼»RqFÿÒDD¿n&žœ™îh³gCªaˆÍ[EI6[²èpMW¶>“ `4L¤â³`ŸMk fU¤ÃäÈ·-žêûn÷›|Ó‡Í=HæÊøE™©ÌK‰ýRK²`s4¨ƒo†JAàPù¢È7v¼N_”í¡0°Aum+He™¬bÍdö=v=N)ì×HMì@&½Í5uÓŠÕH3)!Ø”}åÆ(*•¢þ‹èä4qå¬%ç•dÒX†HEP; à.u8SżSY„“f¢ü4n³0Ì„•E/(’¹›k¬<¸j^ó3°R©Í¨ ³`eÔ Œ<!*ÀGÕ(’Ê™Dì¡@mW÷Œs ½:ÔÖŠÖÆ´uìþ¨Î+%2¬ÈPá¸]•LZ®U”(n"Õ¹Œ=Þ•Ÿ*xfDã›hâÆÙŒaÓ2íDmíÄSrÉX¼fdF¨3”n¤Ò Ç×~£ ćg•ª“uT[Pí4éëîˆ÷Ú5”MûÌDHî c•æÇBs.VH\í–}ÌPÎ5‡”1%|8ʹ$U¼ Ú&²G ¹S/lØx¨ÜH9Ä„œ;6ŽŠž\TCᦳºg"ÌÓ5«~©Â³PœXvþ(YÙ=°%WSTƒ‰b™±gÚæclµÔ¨ƒ6…µÖô;Õˆ+i$NºqI-ã0Ô´ˆkFµ–(øçT”(q`=P>ƒP0` ââ)Y<²ò’q¦ËåÉIU+ƒßy°\fXÖT(‰ÐòÁYL² õyb/}Mp©"IKµaY–GÃJÅ^({¸Æ8VŠ"«À&”p§J…"†®mä°ØR#’RÊg ä(>cæËQ²M}:g®b³­üLÁTU‘çƒÖºÀƒ(öÔÁ«’< ºŒ*¡ jåi¡„:úÐSw G{ÐUÖŠŠåKëòX̦P|—b†bEÈ4qTzÖ¶üuÌj0I¨'S¨®‰éÙ”¬ê$ ¦9ñ—* ! chÈÃ4 Ö’˜D’±±Â¸cYfÊÀù¯ðÖ볇gzîñ®1³4cN¾¢C„ÑŠŸø <¡Ñã•“8´ªŠ‰B!é/fÃèÞ±JbTËŽ†2? Ð,.\Å0U¨Ä"5œ1¥ŠP@•-ã. ßYÐk °Õ('Qxé‘<GUâ¹Æ%”dßÊ{L§”é<(! Ù£ SÍR!ÏÆ“ò”à‚Ž 4I¨jS66`åÀe]Ú‚mÔ‹è&ØJΊƳ.ê ôgÁå6)ÔASÔr¯©%‡Y²}’O )¥¶±ÔÐ’“Ô+¯þÒWHË„ÎT–x"…ßM2$´.K½KqȽ4P.®ÖäJù¢%$ž( :ž…Š”BeÍÂIZ e“¼¨2`?«òRâq¥’Z!d–)` Ö®‹ø|*ò†’Ê«$£ö”5ŇŒÊ¬#ºéìßÜuÏÂT#näºHwÍ!vèðDÀFhÓR¼cÏÐĉl{œ%¶íÔº¥íªîâªð°XTÄôÁìÐÒTt–œŒ„¥¹{Få’(—Û`«¨q•òW•³JBÙ6;z+h­b R¿X8cYÍ’p™›Þ»Š Î"eª@Ä/pÝH±L -À =~ý ½ÎMJYë¦ïnýwSÕépn>DûCÜ%E9Á„ا ²Ø,6 !x‰JæÔ ¢k“®°€‡uyÒG¨F×xìœBj0)Ñ€ób='ä"¾šCêVÖJA;ØKªœÛE¤´@ $ž‘;LèBâ„#^‘´˜S¢a"§É ;àÿЇSÖj%%&õxBòhh"®Ý'IÝ+ù=ÅÆÅv$ìºB„câAh^b´A e¨¹ªGFû”©A †>µmM5)ì©~Éúßxåî Ôl¤&·ž#fCö§`>˜ù”÷ƒSTÏlÔ³¸R-¦gŸ¿Œ …¶ Ù‘Î’.¶… 8Ö5DìZ† ¼ô4!0íš.¤(sOXRÁ@‚(4¥ý0ʪaP‹q·“˜Üœ ¥Œm„À4(¢ ¤~PœÉ¤ó*Ä4s0½"x> ÅK™$I †Å´S‰…‘¼\i–fˆèM“«FËX­,=º2˜Í<˜U[<ŸÛ[$ÎTr‚l©$%k¦¼È&GÍq? é :´á °§òU™²¤Ï¹ªB· ˜/ÿ¦@{뻞˜0×Å¿e^‹¡•›Ä+.Ó½TºÑ*4ãaR9¿J²šÄX4’¬Ó3kRæu3à«™5®5†AJ–¦¶„BWm|P5flÐÎ -Å„F>ïà ŽQ³ÁÉ¥,«ˆð*ý0o:ßrÒz¸tµVgUñeëÇ2“ÞÙ–P Îh®¦á;q÷¬ª˜²ž#ã´º†“\,­èÁ$òÂAø71G–(ˆLÌ@ÿf\+é£X_ƒÛ&fLÌ̃•5&jÏ<ÚeØyì"žO}Èä“°1†%’NüI&^à¢å«\R)}3ö✪gÂ"Cªà)w_BÊâP@Õ§À¨uû$GްÒž¥Á0°¢UEÃBãu¦Ò°Fæ˜?9ôÔ(æ&B24.æ,MbQ¬ŠÖp*ƒYÕm»T{r,cF rDë¡)rW’tê§lƒTé}Ì>â°P lÊú­SNÆm3ž7¬w¡÷`,ã+uƒDc ½`Tl›5òîæ èoæe¢·È*Dé¥iäÀÛ?ŸÀ¢“¸¡†6ƒD‘Šˆ{£"ɰ³y%M½dÁ<5† “ÅX8üaß ¦–g`JËŽž l2ç/-@M´ÌápºÉK•šeÀžIºcJ"c²˜1k‡£0v©™HæBŠ­2Ywi¡¬àÞ¶Zh-ã‡!ªc˜F&¨Û mÐZ6*‡E6EÌ_x¹-!¢Ñ ³úC´¶íဠÚó¤Á—ÔS€íÖ. Û¥k0õ&!ꦊÖ-ø~X->íœÉ— tPm@Jô ¸Á²¦°ÅêÙ ]Â43´}x2Nf2b :ÄBauˆsRüÄÔŒ‘aÌ¢Hš8ø·#‘­£¢°ÊxLž€mÄ#‰eåjåÛRÇ““²ÃD§OO™u%Òçã΂ۭd¡LÅäºDm±~­qWLx•Í®¢Ö“™' žá^B±Äª¨b€–ä=uÆüïš‚º§~Hïèâk|ÀKŒ£¡Æ·ã ”ÿ»‚´þ±c@¥¸°¯&8;&(A‘Ï–ÁÕeÝFŒa¤©dÄãt,éZÖ\¬!…A"aÂsT²."BY9- ˜åJþ&·m¥†0–‚ GÇ#k©Ë’9¾ ª¥Ž¡À9ޤbæ1’Œx Ä Ìu&†ÇA³Gìaçÿ€âË#¯¦4‘wIKS#7Óï¦Nƒ^í¿±¦QÊX{”î§)ãc1FnË5~2¦¾#b.cZ ¶mÛbB]Ùø\\ÙáÇøÑL³–¡œzˆìGˆiÐ£á Ÿ£Ï~û„NVe®“!ÝÞÉOc “[Kg}:NŒH^3w¬k¢k2f€LRz§µÇ2«–9଄Hˆy˜Ö¸Ë†@¥éZ{0ÝÓ•@>¸¦RUT@os_»÷Q¦Â…ÊÛk¼¤7Ú©Î{`‘Þ"žúŒ£DõÐú ½ô$·8ý¥`°i^Dt¸Àå`O ‘¹jž¼‘µšÅ¸Äeq§(r…ÓÁ¡”äÞÕD‡p5#‡SxûjFV„ú>».ö;cälKš./±+›ãÁ* c3˜ŸŸð|•ÌÏL¹•HÏ”m»Úo+€NÊrbúÔ‹,£€HT{cZ†S䌋ç±í¬|Öë8–Há.i3 vêh,G¡Š¦Ê…¯B枊³~íÄøJå9{^)å-B©Ý™lïóºE–y]²tm‚à–ž,Ô(éOGPH‡‡~â'[—uIW'%&<¥’Ûd®Ä¾oö(R7s}HÅa±7UÀ)U á`ÜûQU7™Swb ]'嶉ׇˆJFü7,ï€EüŠ&Ó.K¹dL¶ª$S³±_Yu ®g$¢Úì Vs&\ÆórÒa»ñèéÈC²´ 7¡©êÛ£58e¦eÙ„ë©Ø”é1 ƒmÙMW|ÏS2T·´”èÑOy¨T…¸ˆHr}¶™K)¬zâÿ¨;`ì­îæ'dK`;AòÖ¤Vùw8xåñR5ä¯ DwO&ž¥•FÖ¹Ôìw+/3ŸyÀ,jf$, 8ö1•A[Åù‰ú\â¶ò)™ÙÚË“`;ãy} K˜Î½1?˜uÈãq<.«*—¸Ý×eè‚\¾U~ÿ£Èäð»Ë6@¥®Ãz¦ Ö9$y/ÈØB“Ãä%Î!?Fý°à(.ýxWpKr·¯eb\zÑ&]1ó:”>F4[2áHEt/ÓùJ[yP¡ü”$‹¥ËrëÌzd¥ÚŽ3•Q/3—*1oJ³bwœÞ´;f‚©J^í_'3†ó¼eá,ó£Û”ï ºèR6=ø/·¨û¾•1Ó5 ©'™*mÔ¨øÌü?ݰ¬XHrÔ©1àRQ`SÝzæ^wˆÀW™@a!†â±*ÊÞàÜ™)8:™(ÄtSºí9´ø$Ï  •¬Dåç ñP:8o”µ¬°zeu…b¾:´°«?_z±~),Ñ£!µU§k¶ž¹Ù†ÃHS\A²æÑQÍ7¢¦«%¦j´øú&g½¬­ªìC€B%$uü ÷½jí{t&KùqÌnfÍŸnÅyÄoäK®´Ö°]O:BñW¯'o3ØAëö€Lª(79ˆßC>gµ—ñTˆoÖ¿|¸Õª5}EÂcêí–{P(Kµ_é¸AúržE±w1Xâ°Pd-phXà/Ð0 @|ÊÏ‘Ñéê&¬>Ä÷÷q©VÇüD’þ¨CYp^̘÷êÃ#\Ú~k4QжƤc«‘×…Èhóáa¾-ó;¤ HçWaÕJb¥jnÄH¡j³IÔò£2â’Pna OÅ,íâ&rUÐ 5W*ÁÙ®0£¨§¡Öñ‡û|ºK$úuCA‡øâpb†*Œ­D éPË€Lè ð¯R~Ãá2 1ðXH.ÊHº’-l(þ½p¢ãœ“læaì3×µÅÐPµuµh©b5hßꘇÔ¯eö ¨±‘€tì¬×c•xVâÜ ˆ•^PC„æ'ÊH UøUþBOË­ó<µ¼"¡a@ÒEÙ•éTñW͘Ÿ[2¶;ëâãs?¬Š”Ì}*ëv¯6ˆ5šKí†É¤Š‰½\Þz/&XMó.ÙÐkH'~Ø ãµR÷à<èñÁ7Ü¢°c(ˆéXñ/·ˆ&+¶ÜaCK‘€”Æz¢A!\3Ä”åNYñ'ó©<õF”´s[¦}!aœ…r»Ù¥ÑÉÝ*™½BüQ#©}FZe¥†S%$sZ¼°§3VÑ–¹ œ¿pozñ 6W†öÛîÚÔÄ0Se(ùÌëp"p£ƒ²á®Ïiç;ÜŠƒ'šÁY-KE˜(ÌZгd]x†Ç ë¥fmÆ#… eØàñZs¼Á#ü(à6;œ¹ô¨âÏ5uå6¼SèüŒRaMl¦þNË“ ×¾·Èƒ˜µ÷ùþ7Ø­} kÂþ¢ZeÜÄlCMÝ$‰6¯Ã•Å9lû““¹®2]…%¤sÝÇ3Rí°µÏÝ®¨=?t(éX!ÃúMXÇÖ¯H&ÑN§2c¤ž”h€IQ Îã¢Ï»>ªÔKÓ5™—‰QIAqd…uEÝŠ,YåZƒö[,XÕF‡ÂnWk£ÄáŒÂ'°Š®e6ò‹$=5Á#¾Ôª+¡ ™Ý‡”Ô*:.¬®ë(T@Qiª ÍÈ©u¹$æéŇÌL[YÆè¹ˆF,îË<•°Ìj? ›U!3ØkZ Z´•.‰j“q6ˆ­Í¯Ø0*q©…´‘´U ¨†É#mNyœ³8Ϭò±ߕH[=‰5oÃÙS¶xýÐ$i t •²‰‚LY´ë°Ðr÷ºŒô'üVK±§þG\Ê;õ>õËÃäÊÇ ´‚×½VÑŠ=8%“ ¢šÌ0ŒÂ ÂxU±J4.Ó^â'hï‡8¯ÃfY–~xÚ,„Ó0++«êt¹Œ%¡z‘©ôs3JÙI ɇ>cšY&)ÚßΙÂÄ*pq›ø÷xRy¹~J8w~äöä²mBIÆ6 ! ÂtÝ—ZƒŽ>Âä>­çŒÕ£:uDŠ ®Ÿw5®²,ÒÒ‹hªnÛ2 îEôö#”€n™~.×cYg­ìªˆVœ•€Ýç€6‡šÁæ!Sa·èOÓ™‡e䃪Å  ¦–\骭c“9 ñê‘WŠî”‹T޾éVTrÀ‡à,¯=æ%@ ÄGYM¿<~ÐÀ±yBg­1ŒÂ-&ÍÁQk<¥©3 êT{N\KBÍξ M,—‚¢^3ì iFÇ´)w#ˆZiÑUÙY,IAµóWT· ×Ñ×lºÓ\¼L/R <È·lÝÄ–LÌ’Š:%µíž›e½…ªÛ&ÂÑ¿Æ(î8¬”åk±‰,Î*Ê<²e¬›²V˜"î'c?ÁÊ÷VZ—Zœ`FìåxÊè׌þ¨­cËæ×Մ¬ ‡µ õäÎZõ„¥ÊYJÀEYÃFLD{Fcøul$êùˆØ¦¾/ÁU²XˆSvžÌ†ÃÃ*|%lä‘Tõl (`×{zÉ‘ð¼§æ¥÷Reg_À0fö“ÚOn?uÖåæÈs h"êÚ@0›ŽÀxR'†¹b¿I•C„g!C!;*;¥sÒP5áL‹*•õL³´;¾jr!éÝDfŒÀèæ±îÑhó8Dj ŠpĉJæx2/]Ø!nl- ô0LpOLŒtIúÑs3âNôT ¸žÊ>×1‰ÚN¢ ˜rí2É}jBR¥²0Vm»¹²æ›a«ÖÁfT#/tg¬Žñ¹ˆ`¥#9*k&Ìç,õî¥vÜ Sƒg ÕlBŒ³Ž=oN©he%5JÒY,H4ƒ¸Èa8’7’Ëc@¥4äNá@Ñã·f|kø’Nëåå!ߊ~».$G$Ö°ôRŽöïõ,g7WÀ‚¸+ß› Ö¼Èc®ó*V0O‡3õÚÔõc–é>7Qx ÀsP;]4ìâ³§bˆjÅã”ô ‹…UÀµ—%áìð¤ò#=ˆ¨` ûñOÏo‹xçngÖÑõÞRøBixJîi¬:„ŠuΣ@*ÖÐÀn)=8œe¨tÒ"~Š!6ˆ€aÉC0Æ$£æ~Å(žwýÌݱJˆ%Ý Žê'dŠqðö)Ç MáÈ‘ÎÚRó™\]²A?0œBHUÎk „mZ!2Šcí7¹ú‡å#k·Ý4Ê£KQ>h׆ÎRïÙJ™˜“’ë¦̦qÙ £? ²qnÏýÒÞ°\ÄʺToû]…ªÂ&M—§ ê hþ®uþVR…vÜ,±ÂRº‹ü8ø¤R`e=DZÔ3^Dytò‹¬T]q‹˜,¯gÈ*F§]þmu§B* óà˜Föœ1»ÚÇ !¤ªwçEæ’ªh"Rjw@cÈuÇ!|¦G^5ʸ Åàk÷ýá*)`¯P˜¹‹Lâp„šÊ„êL2zB¬0a7¸‡@j»Î½Aå'n±"_æ%¥!ÁK—t§/¢î¶ AP,ùÔ×Ê=³–_*åCgJPòôŸQÆ\9<\Æý žªc±?F«Ù>’Èb®ÌÛÇØqûÍtÚ¨£%qw†·TâÑÒ³MÉfYp,§^yÓ‘$Ö›/éÞš0ò¢­ƒa2 3‹Cj—"pä¦O‘G_V¡VØÁÀ"g]:š—; ò`NS–G±Î­«ƒIÕ¢ȆdÅß;Êóc¾µ—"S:.#ú¥N>ÔGW¡¥šœDl”õ3Lé‹¥–$üE×J¾$IÇ!UæŠËŠùR<¢a‰{…ÿiçR¤¦ÅB 3VD&¡~Žllt`£œ×8ɤ4žëÀFZ”c'Kfra¸yìEÄ• ËŠ?Ùs¢ç! â@W< uÀÕª^¶w„T£0›å8 ®šÎU0gm¶LÇ%zÞ A£S™¸6cNhÁs¤• V©ŒAãI( ’$*×ÚÄ)OÅ@EÌfVU¼¶±$S¯‹ª4èa9ŒÉ\²Ž™§c{ZCMÃ6x@nU9‡È”‰¨º`)ˆôA6‹,°•ŒÇp_æl»ê*W ¥ŠÆŒÊ¤YºwžÛ*9¡êÀåžÑP‹V|3m7ÓHž£p\W æ6ÓU\Ø*„š0 NÌ«ŸA7¶†&™»Ltl]+ç$‰í¼ IÓ—bï„Âå„u\{j, "ŽÎºT©-?Q$d”ÁYš0y5VêO1.†²t T5!BÉ+}ø€KVÊâ1oî Å/¡‘±-+ëþðb/á4<Ü2*|Ìr %6ËtfÐúáóáе’ïŠNÊ/õ¬*%‘a«rP”í~ÒÎà\Pt‡CÇ(L¾Òq8Ú€ÁÊS c±Ÿ¡£-«& ±ë<Ú.8e¯(Á·²~H¢²}8à'7seý—ýùå`ÎýuÃ)‡™>™WŒï”êMS=­{GêrÂsÅ”¨qðòˆlì×ÔÕ¼ë#mŒ,u,1XI@-ìBP Hp¡ÚÙ¼J7= á4¤zXʨÍHrµd Ö7±²¢W>•)S4Àqdƒ6ƒ¨A£˜³Ã ä•Ù'ÔJS=m5EžÈ„>< Sõ£¢¶þe”úÓù“ê†fΫ“Ù½qã§ËëË¡Ftt¸¡/ÝæxéFõ«`áþÁ¶rApÌ¢c)žÂƺMH_€ÆíG†*{°ììù°VcA?“V¬]ž¬A`Ã<«‚P–h±L|>£¡"WÛ›â`ÉRD‚‰ žNñ¥æßÄ*&Ž«òRÍtB™0æv¦p{›°L™ŸPrS‚y²– ü@§©:L-})4.Mé00)„¦|4ÇÌ…´qY¼Žeo-2õ%RËB§z¨ŸÎœ(á>Så1ª'J§¨iëÉr8álGS¼ª@y²*Ý¿‘)M‘FšÂ[8l™^:‹R8Õç2w»AH|Pý&*qN…Ÿe¿Õ̤÷®¸¨‡c~Íà»±»A‰;ª³ux5BÓŒy©iÍ„ÊåaùÝTŽbçÆ<¹5U½<·è01ö†¼\žÎ„g)˜Äúw£däç{hyÖ5Ë–Íé^ª\ÄØÌY†´Ö]Yã@Ô§UË~Œ.…N+íTFœÅF‘¹†E¡«ðž$QB\1‰-M’¡[ÕøåVh]i1ßäTóäV ¹· !¦:´­„âl!KK¥Î)Åô«°Â(3 c¹¹˜ä=I£$촙ΜW mhäÃy®Í4ˆø^оî#ƙ䥔¤‚$:ê'³eèñº¯²ñÁlV›»ÌfQꢂÛÍj÷ÈnV´($»ÛD¶pšÍrw 0çANÿŠ`|LGZø.M:s™#Æ{ˆÄóLù©tOM#<óXÌ« ¤±[_Ý)Á5ä£!1tÝt&27匶¨ŽŒc2Emcn Á'4á\¤n ñôYéˆtR£8hG¥i°à¡OµöÎÚ-h£èÑ´FaAÈ‘ÇÁùÚ{fl%s[pêdm[Dež¸Cc€"®Âí¨84àÓeòd¦³93ÅDÊáD0JìÇ›Lâ.ÈmvAÑ'Џ”ÔæQ¶Õ‹$a6 !IÌÓ ãß´ÈåôtÛñXôŠ6»21ؤÛiBåoåfž/…Òâ¥Üýûu«÷»×£‰—jai ƒJãÁžHŠd1˜©ë2°$Õ$uY; v)ì5jP3=1©«4,«6–ëYT…ìÅ*ÝgÍÓ!ž"ÿ–s`„u³|4í‰TU·‘»ãƒnî$#Ô¼­½šb6¤ù@îè#—OMµbèóéíð:CîÝEj_N™½Ž-_ç4|A¾À Qx3¸XÝ…â§8(D±s¡„l,“Š"²õ­GòÈÓ9ÐïÅ®by1û©­eìÓoK0ï ’Ð74yäa:Èa÷¬Hñ2éqZÔÚ Kê#<…Eù7%Šc„k}ž…û¤ Íxƒ¹ŸöµŒù‰¦0°ÖX‰øæà"R,IŽº"½½`ºÝDå‚‘~2¥2ËB[W¢Ù#7ÄO¹•èíH‚ËÔ« CÓ¥«ÅžÖ>ކ©a8Ê›Q…Š®SS“«In¦øÐÍe2Š¥Á2fUµ/["”'·p; šÂ.A ŒYǦ7H& ‡¥óÌDÏ¢&~‹—§æþ±TˆWDÔ °°ì˘³•BÇþ°PKpÒ,<,K§D^«,÷J*_åä¨éË¡ø¥*ižà:¤#Q‡0²ãw’ÃJÆd‚UÞö¬›Áèx ó (i‹L§» ±ì§SRgÒg‘ª'*ŒÑÇ™LÓÒòìÞÚÏiÉdfQÑCi>“‹úgxÆK"rBÜFÔ‹¸Ööå±c¬F£€Pœê•nºí¾çÑgd7ý(›rÜé~sj²p^[‡ƒ1µàx 6Oœjú§fyQ÷) jĬ”…úXIÉ3ãIó8)›©–î!ã¥$ì¼*d>M*ïp›Ë™çÌHá2(”†£Ê‚Ý ò zÆoeÛyÏšˆÜQgä³Wī֭Ò*ÆGaìֲ2SçnDQIy)à…ˆ­D'Øé`î¢îtuåñk°‚%6ÌáòuW¹Ó,´R!N§=(¿-½w»°^a¥s¾¦×A’ŠnÃA˜BAÖñT$©0]óP³ÆO“’9I˲qó€ÝއìVaQÛŠÜm<¨‘Bb:¸Ä”UÛè}kæŽbŽtpwª‹Qbõà‚ª¡!˜néútI ›øÿI•5‹Ð€˜›ý„›/ Ô±<‰g‡Qî² €ÈœgFÈ Q „¶.¼N@Û•ÑhM7eìñˆ¡¾Äî9í¨®!p°ðQêl]C•ÝÁPJ‰—†;Æ „¯)•ŸÈ=˜9â'QAP!à<—Nl8U)lÃÂGaØ‚Éÿe¦“iEðÛcaúñ›S—?Zo¾Ö–ÕI]1Ö¶rÏm[AÝ:¯•v¥í²Pâm«šˆFÈ~E_êœÏÍq];(}é£v®D ¦}•ÈLLË™'"¥“P  Ã6›«tša®1I¬’æÉìEcuž)KY¾sž £+»`I„_1›C5èÖ&IÖeM=M~¨T\-Õñô³T‡k—H ¬žõú˜²äÇ’‘¼Y§F3³-uNÔÊy m9 %CæK^Ÿ) Œe—²‡[RòÁF¹¬¤Y"XîFMÿÇ<Hû$ö´ø1¹u¼êݪ/0¶ÖË/ST.iL@œ$Êû¬ÆÈ¢¿Äsºú<džRxÇËèàL®0 šÝë,#4³®Ðªk0}dzÃÅ#¦Œ§¸(–ÃkúyþeM“áœËª)ý¥Ì®jwìÍ}ر3öIÇØs–OÜ=Å¢HqpQ*P,Š¥…“Ìå†ó\Ÿ†Ñœ–ûê¸/XiŠâjŠT]'ðÚ'àHª;¯2vΚXœ¨ÚuÕÖIɦðí2…ƒo$³.…nH@¡~µ Œû!kI—„O‘) YøC»æäŠóNF 8?Jl›0TѤ+«åHçÝQÙ‡Ÿ‰znEÕ=IÜ+DÍ:åó8ÓM%‹‹J!l,ñhD”¹(‚tZï6” Vyu©ŠI8‹ÐçôîT>×.R±d³íϨy0c¥Q²Ž1=ÊBŒþ2 ýŒS¯]x)!Øk ÏÞ›’?KU•bК¥ž÷ +pÎ ½.]ÕøZ¡wß׊jн¾¨Â6X.l‚~V˜Îø°©„Ó×·åq¨­œO;"é6yRQ¡¢ãw‚òMÌn AL-ÂA&¶ÉD÷ê OÉ” g)ÊTW`™›D©Ý˜NRYF7TWKÛ[wRX[ù~2óÐK¸OË´,gÓ"µ)+fpÜA«¾†Õd†âÊ´Rë‘–ÑÆ…,ƒc¦ö»ç ‘Zë í[’Tø}ǦDâ rüÈLOtò¸)í“„EÒXóÌOnð%Á›I·~®—Çž&3М’³âéá@W7š8„y3¬ 5}yBR¦scç-ýÔg€ £p²´ ÖӘ£½Ê¦âÙ?M­ghÓK=´ñšü´øá¨C‘0ð¨Ø¡®Yƒª½A/kcW]‡£‘I¦Ñ¬Qíó¨U5æ$„^•!5Vî÷/…†ÃÒ?cÿGB ŒN8¤¶i5‰Cˆ®¡en€4H¬ÄšL³DIÉœNž®óD[ÎI¹t³Ž)[­ÖG SÕógÁßJùæ•’’Œ£J’ôçÓ‘˜ {„4!°aЫü÷Ìz FGyOeªur—Ÿa^VáèPòˆ,ÙöIªa麉³!ž\¥<é@Õ¯kž€Üð,ë–5_rwæ³iV£hÀj¾ÚdNø™Õlöç~„#kÊÃ_?Ù*GÕCVÅþVé–å &¬ý6aQÞçñ8¨—QÄ~\UAƒžþfüÁÀªE·ƒª”MHVAéGVª žH+MV–¼(˜Æ( œzd(Pm€äÅÓÂq^%¾#—/ - 9e#&רÎþ–(-”'˜€iRÒê_&%#ö»W±\ÇMhÌJàCTM³I:÷) 0+½‚è$€…ãØxL}'v§@$3Oc]µ¤@$X÷!yNé˸ýòX1Ú?%ÜÁá'™ÙgcÚÖ„5[Ḉ‡á—1´–ZZi)u*XIy¶1ˆ 1¾ÀŒx¨\ÜÁ‰­¦ /û0ˆôå.Lä”±†ÒÜ»G4ñÓû— 6R,ê ­qýîÈtJ2­&©A W*ÅÔÉ:š}|ÐY×Ì÷’X¡‰IÛ‘'ኑ¢fÎù…Ž;— "3“Eèü^R؃í´J&/ÊÌI™5ü›¢-›@ÈÔCx†î:g01Üã&Ÿñ«R†3ýê˜g*ÒBÓ&QVKêÑ¡ü˜¢£iÇ8ç:Ó™r<=ŒÇÔÙ7,ÇÕ¶NØ©Ÿ!–´”µa!m"íÄ÷G?Ü#ký¼›¸Í= D™W@„t/¯H{Å`:UU(„¿MDQ˜YÎóŽrº„}Dc(Å´Ø~(Øê€ËXLóBuå-É}꘼Ç]$ØêšL9ŠPa$gam»íAçŽÑª!h‚—"•J+M•X@ˆ–(æ8ÕŒËMŒç~/£ \OÔ`ïyñ –;t»Ðo4é‹:ÃØÅãZ@}sSaÅñ&‚éÛø‰=8zX• {Ì¡ëãDÖ‡³9v›Lš×õ„ 6ƒŒ‘ÑAË`só¹V!¹îÒFîí<-çãUÉL#>;M‡'NUºYÉjê3xí%H ­Èaב’Í“¶¯øP6<¾=óÔ0S»Z“êÛŠfeÏ&kÙ9NámXžg G¨ÎBSü¢wZø@{•M"×)†M85°å‘HÝÁ¤”&T/a¸;°âç,ûj<Þ71A}¯Ø_¦ç0^‹`!’¼ˆ€XqB”ô:TÇ*â0Á³3V­EµŒP¸æ•P]½lé5¡‰Úv«ì4‡Ü ¡ vjòSRŒd³‰ð¦„ºdm;¬¨)O…ª<©-¥Öe­TÑHèe€QB&Áª’.<ÐÕþCJ!%†©o4ÌŠ'å#ìÔ;ÔÊ¡ÁKb&kŽö‚.‹†#ù3éÌ7æ£#-óJ|„+f¿ºû–y-H„³,â²Ô u<ÂHSí¡pÁžõ¯´E5^ÙL¹GR€`&•3®Ó™ÝŸP Dƒ§ÉÎuð˜‡ÁIfŒÚÐj]Öe˜Ò‘-–mž<ÛoYç—3“8cñ3ªÜzœ2L†éëyŽò“®(çdË:DZ§Ù†ˆrØrÅ5äÒUÝ‘›ØÌãh9ã`áâ¶A®Kä$ØZM=f°Pdå—„eÚd$8Ó³ÅüFㆺÖ]m3Ù„É­¬“KZš;-y$ð 5&k½po¢¢¤gbiEª×@ ™Q*š›Ú\#â© †žÁ£~) ×󘼇€Ë)Ç:M}y8:.©©CìD@5‹ìÍj眨 ]Kë—,Ëab¡‚¤_2Ù PޏžÉéòiDúèiÑŠÉ0GbòX=N¯àªˆ¡ßA½3u .}CĈj0†fQ.ƒt•Ì郅w`<ƒw=L…t£tÔ®šOŒÝjiÒ‹fºîfºæL«KÍu͹žû\Ï»¹>œêHMw|£9âªZæ¢E¸™+iÎ:yšrÌ´Ø(æ1J2ÙdV:¬¶uõ]èUØ5üµmp`Ò¬£uVê{jjµ\Ž÷¡Hg9…ãiÛƒ}(\ëˆZÖØÎŽ÷¢Ö÷"[õMwzo£¯Ö4w’I „qÔq˜"Í]MnáØcpWM©æ5 ¸N”Î&g8ëoäâA“ù~Èc–Ì/«8îB¢T—µqÞ‹Žu8T0Ú¹ˆ ~dB™¹j…5ÐGµÓ–U Ÿ*c?Ü‘^38n¢5bŠ- ϵ^è1éŽÞklÂééοQóÀÞ(]$ÖÔW‘òxÚVÌ8ÉÓ‚ç O»`m±b]ÎÒp2+ò–²ì˜º6ȺÛÄþ8 ól¸€ g3ÕÓih{L ›Išf…#ZÿTß1–67n+8d¨ÁQ¾¤úÀ.yljÌøgçÆ X²Wàq0} P¹¥i%’NØR¯ãdËð]Ö?¥ ËØ–Q¹BŽÆƒ³p\2-KÜHc¤(’¶`ˆg(ÛHƵ¶óÐ^(°ž(†,öíµ&¸êfU++“ÙÊIƒx–Ñ‚óè²V!.·T&nˆé`þ:0cçߌ‡ˆT_›h*¨/?$W4 í€<+ׄ~†w…S‡õZj)ä1þY1+”K™½%‹ƒÒ8Æ2ì& t^,lf\Év¸iïßœ¥˜ùYŠY-7TÓ•':L•¯àжý U|CÔ¢vO’ÁËÝÀýo›IIDm¥šâüù«<’>³¾êN¦G¬›ŸL¦Ô­lXIIͦ/&2ïû± Y8yŒo7r?gL¬}r~˜Û`‡ðó’z21ø£Ïzèùïãá™mqðâyB3/VêÐ3ö@UfŒ(ºbž’èÕvsEøS©2ÖÚµ¹g9JÌbß½â@¨‘î¡î%J#âtÇ8‹”’蘠‚±+…F‘[y£ÃÜ&õˆ«¬]¦J-µ–ÈYäÒ9B1Ž3å$ÑYw¬È£jBÓ*‹¥ä›ö>s"k9@“xêµq鈵q'pB›êI·°Îæ!.²ñ,ø½U€ÂÖÇ„…ŠlNo£Ž‹Á±r­S³äEïöëé.M¼UH( iXúëÉZ.mj-ãI":›ªæ ¢Bšptb¢³C=Ž;+ƒÇ9L9w2–@Ñ0 †•cbOÜP¢‹ —Šþ%¢6žÑW ’Õòvµ `IÍУi#1èpÂTNrµ ˆ¨\ó 9$s ú´j–Ò1ðÿÓâ?ÍYy<EL=™&lÃ.×&Sz,kž¿ ´†V)kf,±SwVa̜Ɯ¾øaÙº\á`!Ñ6Ñé+Èb­j…bìiê¥JïGãêØs#/{Á€ÂéésFÃAß®xÒ5Ôæ:•‹´Î‡¤ûÇȘ°O§Tð9ó°<œg&'bB~"/ÍjZÊ‹4Ì @),ÔSx™u•áºhþá3&=ñÜLc)K“¨îF—}8¿ê±Õeܫܗ¹!^¹Lplc„ó])¹B¦ÌŽŠÃMºâp^Ö*T@LB¸Â1yä燗,Gi—ñ¹š¦žOra:È"@švVˆˆ™Ìî×…¼ƒq5ªJî%`<¦jB¿atmÓu=ŠÅ­Bµª¬/w”†¾0á)˜kì!úõaˆþ¯€5hn0šèø…Š*xÜç{ÉX§Ü6°PNö¼ [­ÔýKŠ‹Bõ:)Õ^³ß†ûÁ˜[KëUÄžÐMs¥aŠëoB 7#S*¦uD0ç¬*ë÷gŠôŽŽùD¼}ѵÕtÑéáôElMôèÜš‚ƒçBšAJp˜7K-er›b5W©cª´ŸtuãšP7.‰ÃA~¡tœê͇¸Z¦Ã0¶Š‡²²€\Ô+?Œ±/žÅ/‹‚Xeüm6¬!':Iãƒjn@3Ð9]zUÔuöDN‰×Þ(•WÞàL†²ª›ð¸›ð£zrƒÕ.>9\íZìW{«:(RxU¹rkk§XÛHÊf¼8÷Ĩ–J¯SdMGê¤Jði"Ô[mMŒíë2Nr|©jSÈÌf7­ªÊ¨ãÁ©9­<½­¨‹1"h¬6¨“GsÒ쪷!ß@•÷`³ÒÉÀìe8_: Rðu¡dHˆÄ´6ôʰqh ;œúr€·7óîÔbÞ¯óÀx¯»õ•Â4b¥ê¤`•€Ré1½MʃªJfyz.sdäs%ÑZ\yEž—ƒyâýÖ!Ž<ó¡¸ýF¼Ï¸šâ‹¸?xƃ©i®”ò.C¦—ĺñjƒ¡ýFdECld Ï>o’ÞöWú!?Þ—gñ§¬OP³{ó±ì*?’b”$*ØfÌÖö©~#¾t¦ ˆ1Õ9W¦×ÂYŽóÀìX6ŠÆ…†„&òƒòèó3#¶•GH'V‰ñžÈä†äE_ž]Ç á%(5U‹®49’‰[s“v ÆìEYxÁyˆ«ªP1:Z±*Ó±b¿³f¬ úªã¿SÚ[k.BÚ|‘U9$¨E›\¨iƒt“‰ýp$Wðx;Vß2Âyi©Ÿœ^ãV¯³òÅ:…§‚Ð-‚f5jrD ù˜2xªØ¤¤•ŸÊ81åð„iáD ¸ù$$$QsSMLÉ gf<ÄK´3V¡bâ)™ç(jg;ø\^þ>Ó)œCæ‡ ³ŠЉ)êzHŸîAç3=îÂXvÈÉÖØ0o L›SÇ^›÷"¥(JùK»˜Ñ6ÃbþʶbÞµÛ|™ý®UˆZ©ôªë„àà@8ÕœRT=Måu8õ¹ s8ïÏIfÈÌ›Æs7¸Ëçá²U‘™ú[cã¬S3Wše¹ƒ²$Ùt y¿†Æ-ëZš 9H¶ˆuˆϳ‚V)´jC;<¬ËZk™‘£¶£ r²Xå«K¯ª*™GÝHÞ/Â=ø¥x"hŽ€#2Þ~Èï*=ƒ'™gޝ¼î•PÚÓú[é`;œuæ8dy ·ÃPÇ´ìŽíƹ4¥L„:“Df8ùu˜?>­0åý¨|`\ÐêpI~Œ`#$ãå–ˆãŒÞ“Yß„UY×ñ퀌LÚQH$xNý ȉ­Äçä³? mRý¬Ya«Õ9’Óàî£eÊJMúJÁ¤e z‘vå6ߎ²<$ÿ„ ¡èv™G]6›Îi"uÈh{N[Ö89Jççôå?èÇÇãðmÉŽíöÉV‰PL š•‚ÞÔa×muÐ 8*Ä¢ÔYèdä í±ñCL˜æEe0çïêø¼¨Þ]!˜˜•ù¦¥ Ç ²dl}·ì{ÌWºõB¶˜ü/-Ïê¦øGKâGúá&ÙdN™°’ñ%Q…§Rzö„0C*§Š´Fy¬âÄYEë#Ë:£§ËäÌR–zòjûÝé2ÎC­Oë9ʼk«ÜªóLç—Ë‘‰YPi°8$! ÕÄ&éÀE…èRKm¥Ã!Y¹–÷ų»™ÖÇó[‚l}c©ÿñœ6NØR'0g–þiz 8ô9.Œý­öÈ"$±ìN=M$—=$®eÖ!¸2œTì &£ŽŒ¥ÿuÅžÂ6ÏÝ2Ô³¯éÿ«ádÜrë磹ŒTë(VÚ8EVuˆû×±»0ž;öP ~×°:ƒšÂÐZ¥:{Ý¢91˜0Â`âI4 ¹>H*Ó’EH++:ÏðèÖÏó“”$ BUYxëb!&ñQdй ê¯ vø‚[VŠÊÕܤ¥ÊÌ+$¤B‹¤>S°ëÑzyZÝîA|÷ä´Iá­XdE¶«pPTðÛvä'B… k»'ÃŒ‡`n†^B a5=uí2eCÓnSøýâ+-¾(¬¾Ì­+ƒµÇábíéXì8Ø='îÞ+‘²á¦¯#ÎsÖ$©háj)§¬;̿ȣ1há-‘WÉ´)¥…ªP|\àÃë{h RŒªP‡= ¯‡Óoæô!TªÇ®e-óœ†Ø¯Å€BHYÓÑ8ÂÝÝ ´`€M&Ѩ¶Q4lI¸-=©uËqn#¼¸¥<·Ô<¦¬½³^×€¨¸'4[4,•ê''n8X*Õ"®Á†µ¡‚Šj>>Oj C[Þ….«î Í÷¦fÎ<Ìy #jšºa¬C¡RÄvÊñË]G æ:Q˜·*õñ:æ¹±"¡a0vSŸò4 0 #üß`Xqâ6b,q0<ªÙ–œu‡mz¾°9vÍù]”ƃùm5ÌPbV —¯ <‰v%Ë(TÊT*kWX–Îb¥§Ræ¾#-Bo¥ÜF“^ÆÜóŒöu(¹…±VÉ$d“§±því €ð£8® Pet2 .%I!G¿5ѪI…;1«÷('>ôfëCHiiä±|u+õ¥¢iEh–ô¨Y 1•ä£O—Ÿõ¹ñ %Ú†V&ff+˜’Œ¤zÑÙ'5»ÃÈ Àqc¸Ó»Âs:ø)|d² Gi“¡¸…¡¦O×q€O±RØ…¤ñ¤™„<‘Œ,)<òsó¼é ]•-O~8†0†ì*ÀÍ›åµUcÚP»¦2cPf¾ûÃ;‘„rYã:šD1Ø9¢]¨ Œã\)öQ\ òîåuÏig¦é¼s?µÞz’=Sd&.A¦Uf&x׋Rš'´§ÊÙ£¤GQÚ4ç.„#¾ †¥,ú\@ ŒH»½Áªœš^*aew_™åiÈŽ§Ý©ˆuäke’kÂz†»õ©š·P&qˆ;M¶i™%sœÎ_0 ÍåÄÄp–ð4þujVÛ ÈP­}bQFŠX+1¯I9œOÿ\:£ÒD£…ãQY:DÒU:Ê©&%B6¹¢“Fá¡!"HõÊzÜZ˜Éþꙹ•œÚ%ŸŽúÇ /ï’v•žË ‰½Ç-·œž¹œ Œ¡máÝÌW3,@åÉd΀†Î°ÚPÒDO¢>û5ñ3ÝQx3ÖéÁmw¦»‚r?§Ü‰½ /56¨X™Eã>Õ4¦¥u¦Dx•aµâýT¦<¡õF‡³ªkšX™eMM_•!:ˆuJuçOâðÿ>­¬•OÊLb\ŒÚw'_7i}jJÞ듇Óë“ééåÉ›íÒ>þñôYaw—ÛÝb¿Z/OÓ,z}òê|q{»Üž.O~¿´¿‹ýf{š—é(ŸÄ£w£öíÉW§›“åÞžHÆöòìþÆ®_߯W»Ó4žXóÍíb}qš”öíü¹õVo쉟ígq{šZKã¼½³»7w÷hæÊº\-oÏ—§Ëèd¾¼[l÷7Ë[{|o .n/NWý³Ë“WïvûåÍÎÞúývswZLptWa þóíê'€¶Ý­öö÷=¼¹<}sò/§ë“…½¼Þœþx²9M’r<WUdƒùùä;#µS“mFF­Þôn»ZÛ»Éøë9™LòÓ*ŸŒªÉßÿt2}½ÛoçûS#šhR)÷'Ÿím +€u¿»_¬×ïN89_/V7Ë ûb½Ø[“ëåÛÕùbm_- EïvöüetbÃØ¯n—xwaÓ²<ÙÙd¬­ïs|Á^s@—'׆€u±ÜÝ­öK{eM¼ý¼Â­írqqZ¤#c/íÉÂÞúéôöd±Z/^Û ~1X/·Ë¥aíÍ!ÐÖÁŒ­›Ýý¹=z ´ÙetòûÏAÚß–ß+†ð«{Ñêo[ÞÔÎîúœ,¸.;—͆ݾ '¥u³Ù¡!àýY7†;›¯ç§™-¶“ÿ¨{)êûä4© %þbèûbع&Ú ´1ÚJDƒ@·c7Aÿ«óûõb{úCtÂ…ðÓj»¹õ5ñ 3~ƒùµÅqn³²_l¯–{#¢+Žk¹#…Þlj÷, ÞxÔ¤Í÷õÉêÒw‡²Û­ '‰ ôlÍœÛ24]ÜnAÙûu³xƒ¡ ²ª"å]?ÂY˜ÆÈ^Øpü‹;t¸\¬ r#*ð¢Ïn¢ìïþš‹énÁ'À$ˆbëÌèü|»z}ú£!ÇhÌíG]GÌ=¡„Åwyr»¹¥™-t›À5D˜ t@?_¯D[—>S>N¾#Ò¯£-'»û°Ü~wª¾nùg³Ãkw[ÿþœ‹xqËF²š’p 0-'_?€ÕÉ›[’Ø-(fÃÖ‰¼{ëkÕÚYÝž¯ï/VXcW¶`l%|b„ñú~oo/Ö» ¿XÜ ¶„W›4á ˆ(¢ªxNh²‹³6]m¶+ÃS2±Ù.O^Ý¿>Ýžü°4^xÎy¹ÃâüÔØ<™ö<Õ>ðíéx§m{WÛÅÍ (õ‡“Ï·W÷¶uíNï"c¡ßÛkØQÂmuU¯FÆ_òs²£gÛÆZn¬Çxïþdwgìbi?ç+#¥?ã“m?ØïŒÀÖ6“ÆLìUP¸îzÝ ×´ÐÜzÊë!”#Aùž0TŸ/w;°¢ÐŒcн¶LlßœÞÝÞ.lË]yûë›(µkKì+ }¹µå³ÀȦ& €éÅÅ ¶Ö®OþiùÎØß¿X››íÅÎ÷Å«“¯®·‹ÝÒú0Nñ¹o.Ënsùd@Y—ŠzfÌ#)3Û3£vw’œ¥ÞíÉÞÆµ½’aó¹Ê¦Ò°¼íÚ7%øu¿]õÛ×µ¯m_—¶¿ì—@xÇV¾–d  ™°­HÓ—Ã]ìêx÷òMýûÖö­gm ¦Íâ¹í%-f CÊy»÷ üÌk%} Ááíid ª-®Õ7ÎÕ/p–ÕínµAưÇT¾»’ÖXæŸ72œ|›Œ­ìI¬t#ä±qP;jíâûïN?±é½\þŒñœK§]§y°a@Œ]õfIÞ´¸õž–ƒMæM@}®åó‡[[GØ­wßéÛ2᣾ƒ»qóƒ\Y? ûH›6Žgƒz>y© B:P°-â8ÿ6Š¥€ˆ=øÊfþG"3‰ÁÅL,"Ç]w{çV›6¶ëå÷&ÈÝFƹ\ ¼<ÚKV= €3Ó‚ˆÌ¾ŽÕ¶3\.@^Ûåî~½ÿDR÷ùëÅŽÒ”³D_„Iã/,[±þ•M/fÔøäÅÉê¬Û¦!gIjýáhà˜á˧¦‡úÌ!-©£’œq€M£{ÂW‰_Mš.!ؕߖ %ŒÇäÔï­W=}~âòÏ¥v¡ˆÛPÿèE M¡MRã°Z%ÜÎ! NžƒJÑ= â½z>8“.7îa\€‹4q;âžBzƇNTé8ÉQpË>:—$V”/î·>@f‚ôŠ¢«‘I¯2øf‰©¾òôô¿Š†SÆýxGB8×&68X¹˜ÂQš‘_H$|b®ó¼ìEB¶}EAj ^>!úJ‡ä>wiº‰“<øêvɽzuKò>÷e£x‡iZpXD\JÄ…åá2Н,¯EèC¼{M™ÿæÎ¸ëV°9Z¿Yí…†×?G~|I¿>qo»×Jºr9§Y¯¸‰x³g”f)Ô,ÞýÖ7«7ξ±Žª°L´K~M‘õÛÉ÷"ƒkï$Aj‚ÿÅÜ>cÓЯ©+nNÞ:{¼¢ê«‡GIa"oš%Ô´ý4)ãr$±qºžð*PÍÝHc°­¾¬âQ:úi”Ûãµõ;i¤©MF'h`#…{{³2j·þ bfM½ÜÜ9Íõ¶ c/¹cÙ òýæŸZ7ІWìÆ'6³šâ ãtÏi‘»%Y‡+òm2ŒˆÆ•µvÁŽåj2¼¬Lî´—IPyC·#(«-DÅ%·¢åÂèyqÁuNL*êIwjwê/únW¦q€xë{uΑS,RÙ¯ökçÃ×.QÜÝ¿k‘’XŽÑ#yè9(!ÛO(šcÔÞøUÇPò ø’}á¶Ó/£XÙϪòµ9„I[JjLS!>®–áºv+‡ÚúbAÖn‚Õöåsm¢Ï‹nê/¥Aü¼ÚaEšò¤í’#ß] ÛRmoÓ`ÆÉ„ÚR Ç|Fq|,êÙÕáœÍÔG“‘¤v“V’ à\E>Çã|4Ìåñ0!v{nÜ"ÂhÉÔºI?2©ü_}>}åCôN¿;IòïNŸŸŽ£t\X;·¶±”Æ“JKi eè²×¨–°À¾8íÖð_lÙßuëý?ØwølŽyÄí ¸Ë?-¶ëÝöþz &i¥e^iý'¶â—›ÞNgðD&\ÑN'1kŒ•¿l2d–Âæ…+ô«ÀN¹w»û›¥ÌøŠÆ”e'„,¹m¬W¯·‹í;m¼ˆÃÍ|âFzéz¹ëÉo¹Ýrb‡†FŽ•¸ºµ©ò5–ûúÞh#3î¯ÏåÒøG¸N#•r” Ö¦\-;‹Åו í«›Õšsxy{îû#­%²%ûX¯‡À^ ]¢ Û]/ß9ç6´,vo´+ÀB‡±žC\[‡îAhç$÷ÁÖÄûƶ5QceIl]vKI¢_jß×Î~w¿• ²ÜQ•0žx ä‰ç2dLû€ÆŒhü ö˜Óh©j!r%‹½ V“ÈârõùÖ®qõ’>î‚êv½R#6œ-ZÄÕ5Åb}@c6}ĸ…qrÍì•´ÙÝ­ç´d96ˆ¤[JW·Üp.$ÇoÀ|e/ƒEH÷{*Q‡’345Ú¨©Z^a¶‰Ó±£ÃÕ[hnLÉ.󮴥ܺh#kNd‚åf ƒâ€í8Ét.~vf7Û ]‘[^QÖ2rX¾5Ú ÷““7„õR3d"8Ì—÷ÐÒigâîBªüÔÆ…=2¢FåËf¯ï-DCYx`’xnøtùÜÕ¤«ÎÆtnjÜ~ ]3cbæØºt}$±Ù>Ýag„¼]Aí[‹_j¬\Ÿ–®e°tÁ‚·UPÜ_¯ÂÝý}~¢ÝŠxêGÌ}u`-¤Ž9&FÝ µ: ÜeO«×´JÑæRÔˆAùÛ—‡D»:á¾ÛQ©}SÕzAkÐöŠ‹ÊäÛåò_WǺ@-ò,’ÍõÂÕøòqÆ#kä@Y>ж¨Þ@¹ŒÄI´JKÚº£Í*èÁIpí±ߊ4¾b9ü°ºçõ0’Àšë$3´vDŒ)›“ÍêbX§t;#ùsÄÑòM'Ï-»ÀS— w׸ž!úÛR7i¡ÌÑû7ðLØ0ÖÒò1‚ k ã).}»D.ÙCCvogßú)µ-A’5Ñóü~·=\K]v;ç¯K%±*§žmL$LÆV{ác30Bç HÀ¥A‰z6¼k7<ƒ¹àÙ  n÷k¿QMtFJ£¯Î¤ Cé‚ÐVÄ*¦laËÕ`MணÚu ’ž›TÔDv'©,{Á¡—Bzuwº=F…Œ=q™H^™º"éËwgrP¤¶epëì8< õ·Iޏ‘Ë$¼ø‡oóïO+6;.¤¥§U™º LøªÛ‡×ËÐU>4ª ¾1.{Ù~…rsz1joNÎþþÿÙ.ÓsšžFíúäÓS üS{Y;âÙÐëÍÉߟ‘7 éaqXtL0îôú†$Åý)ª ž¿µWF>Œ¡‘î‡nìË `­v\¤o„llji“6í{Àf^;§üî»KcÆZTN¦ÿɹ×êeq£“Õz}¿Û_ííêêž¶ŸÄuåK ×SIÛ·+¨¿S#‡*1@ÆcÍdvŠ8«‘ “†›“Q’Žs!ù?_,/EÈø¯ÿZÿóׯþðõižÒlÃG3x[On!ïBA>¿^€xþópzUU©çŒ¡#ÛŸŸOîW·ûïú÷–ziuò÷wßÂ>o: :°wœ –@c£CýÂP?›|ÿ§»_ë•;è¾fžËI°ƒ}<=wÔ½óýÐ$Ÿdä #ëm¤?<…›e¤¥(/ñù3 ‘çn¹¦ Û2 È4«º‹¸Ü I…Êo¿¥`Š2p‹ÆqÈù„ešÝ¦“7:‘4:p_n77´f?9¡+ÁGX2I Ö2aîvÿŸŒ“@—¦¿Pøò䫯?ûò›<ÍaI9û{‰o>µc,Á³ÓK§YTB™”c§þų?o£øk1>Ôøgó û¶ý5­$JmÐàs\Ï+®}©®+ð2–íðAØN»Ê'ÏÝ Âo€å­|Ñ èË`÷ºYÌÇ%}Ú›c5l9ô2¹1”ê(½w³_ ÍNÔŽ|Ç™ õö¼ôÈž—²È¾§=/É*q‹ÔPñ’‘z»»% Ý# ^®×oGiQáûQž£—÷Û·£¼*FöáÝe2F/·?¯F/w˽¿Bç›ó{éöŸŽÂο¼ÛEƒÿΦ÷ûM»^ìoF&î–#âèïFÏþ}õ‡Wß¼ª¿þì«oF_}ý‡ÏÿðûQû‡¯Gõ¾n>Ÿ=ý—QöüOþ ^®7w4öîm˜¤v¹]®ñûn£°®ç£Ñt½ñ‘ÝÔíOË‹çÐÏ|–A‹™‰‹ø`÷‰¢³×¯W·øò}ø`ï¯/Ö›…ß¾8{{ñ°|{~.ÿmt{oýêÑßb|<ûÝMøð.|x>ØÂã·£Ó½Møòrµ_¿¹âïìwuøæ‹ðá_Ç ¾éÿ24þ‡ðåWmß Áº¿ÙÂÞ®ÞŽÎï·F÷{¿ò÷ïúï÷Ñõîào\îlli¥¯ï eÞïvó¶ÿè‰"ïÔ”lcßg//vw£·g¿³¿ºàó»…ÝEã»K~¿»¸ŽâÕü`P¯Î·‹Qü< í~òž_žß¯7»åÝb=Z_œ½¼Ú]í?-u±=»‚ÙÆH®íÍ—·wg·ËŸ»§w?=°5¾ásÿr»{À=ÑnáÅÝN"Xl]xI‚âxùìp©XëçwoG'ß60:úÊ:þf³©êö£?\^Bº½²;¦Þ_|:šÞ¾ûÊ86ÚîdMûþ»ÛSùËåv›<°M b£KÛý®G>$B¿º\?\Üß…Ù¿4HêîþµqÑÕ>ŠØŽÝ^íß? L92®Þ¯.—6Ž£áõ~qø;|ñáß¿7ŒÝÝ-/Åû¶¯F¢H‹o½1>Ú¸Ë Ö4­OGëæû(ú`O6¸Ï×+ÐÈêãïQÓ¸ÕÁm[åžÏöíä¿ÐÀôGT¦Ï†ð—zúK¨²jófy¦?>õ£›¿UöAþÙí×¶?.²Ñ³d´ÝØŒ¤£sãÑ£õòáns÷^kŸ¬þýÕÓßîŸç»}}}þæn)¶ òìzˆ¢å èÎÞá8/6{RðÍýZ”.@›IOÌ©qýŸ|–׫ۮïÑâõnðÛüâˇ_‰Ú1|œß¼{s¾Yo¶£ŸÖ£‡¾xÈGôÌ0eÈ\¾uجŸ!„™?ø~»¼[.Œ”¬™íÕk5†‰wt6?Á[d«Ú¸ÆlS0ùôößþŽ/â ã{‚hЧݾÚ.Þù»×Ëó7O=”ú“øG}ÃOƆF·›}‡»íN5Qã÷+„Ñsþbs±4Vl38DÐû‡(ŠGùèw«Û7ìM(êæg!'vÈ  ÈçÒ^f˦on… ƒ[@¾phÐ?òhòop FŠqA¦@ñ“Ût ~`~<£ãn¥Üi= °pØZÕšÉÏnß|¹¸Y¢GoúýCì#mÈ=‰›@;¼½º1yq8lL÷ÅCÎà§c«õrô» 뱑×Ë·ðsÜ^…ÇŒ•8‡ûrÎešt‹?ÇuJ ~?h ŸÙ—»óó’Üø£þ°ã ›xx‚&|î§: õƒ3¾ßÞ/)ÇD¿Ž]·*öÄÝ%Öêþíèw{ˆß¿»{{IF€èÖ•-×»ŸWdD«Ë ÀìßÙ÷Ëw÷î²[ºµÆ+×Ë•³DKØÝþõöùׯ7oÏ~‡g!:AÌÇ_Èýúû¶ã/—wç?aí-Ïß›~³0Òê÷w¶Sütf+t.ç­«ä$p@&WO<£)$`O}=F€(ûT7QdwL\ п¶¥Åíò —úø¼G_ÛWÚb­™ßÝÝŽÎZ¯öÙ«²ìÈuì ƒëïfƒ»¦+ÞîlÃ\R-øQ{d˜?^oïÃ"ì6O55× %?Ý€­7®®ßÝíÄy@f†²Gî#â:Øá¹¹K^%&ÔÀ»ŽÿGìê­w¥vðX&|÷@u ܽÀ¿Ô: Ÿ5„Ÿ†ðö`¡mƒ¯UÚ»G=8é­ƒG£ëFð®A¨ó5€8ŠŽA¾»|0uaÄy4¾á“÷»»›þ`îXq#—ìf¯AÏøýŽÏ¬H 0qŸiÝbííµ£hö„ßO<Vê^K´ émÝ%K€êƒA9«à{þ…ÁÐZžï#< 3OÿÿÛÈÔNrV—™M¨z0íÔ”XS_Mq5•Õ4Ôð­3±.6Þ‘÷Hq¥Ÿ/l{ø¯qübTªµH¿µÏ1ç¿¿xÏMæf±{ƒÁ@Ç \ý;6uLíB Qãüd¬p|`šÎyaH¤¡àL³ý6’n¡máõ­€·LJ/Wpgñgç˜"˜­=ùœ 7 £ñ÷öë:ኳ°{9Òë%Æÿ‚¨aº¯MÉ~Ã_{­ƒËí9~éÊLo/Äl©†kú NÁÅ Þ¾9hâæ¨‰›¿Ð(kóî ‰wGM¼û M¼ÁÛošxsÔÄ›_jBÛ0_8¸éà`KÅ’ýÙ~ûÉh¸oûÊxï_ÆN}â´-`û¦1aîÚ©iÜþ@Ó¤šÍaã#ã†zñíD* ¬{ò¢{ô¢{¶C'Þxe¤½¡(u¹_ÐF•6,ñßÅE?w?sݤ¼Õ5o ‹ Ù4¥}b@xÜsÀì$¿}šÖo ùO¨'‡ûâØ¦ œåư=ÌhÃV&®8„G7âp÷ÁÁYøõxðÃ8ÔGÞø¨õõj£ 0¥ ‚Œ@2ÃöŽ‘ÓÑ#ç7‚ ޶0®á«ïîŒÐÖÑó£w>„»¿„9Ãí¸}´ ÷±ýðŠ€íÒÈ–˰°²~áùwáùëÁóùIcÅîÇ­Iì$Üf ÇÏ¥!¬¶GK2Šòmt&Èñá7?$¬žxŽÕ¿¡ÑЌŠd2ÿúËÛé»›ð8HY›zι%Ïcñ¯ž]Ñt¡ÄÚø ùßIŒ¿ <ðrÊüå’¸¤†¸X掆’Î(x)!–ÒÆ‘$+Á5Š‚Á{(“ú¸Â-ÊÛ\B]{A×—U¸E¥Ð—àåâÖ ÜS Ji0DÛ·{)ÒX‡ïñ{ý„ØÄ|u Uôƒ:º¬H>m¶ñèØÝFß~Ýûú$[bë!¦ê±xA¬]kPˆ’ˆK£9~Ô˜I:Â?ör|Yñü§Õ™±•{|¾£ÙÛµui:ÍÖ_’z0:¼Åv~÷•ÉEÕõw_ín%.S¿7RÞ ÿ’¼·;ùð}5XË~Qpq¿ÖÀ«Õ9³ÄhÐÞ?±½_ði}ÚsG–ìo(ÒŒn,Jó†@/ÿÓCè÷_ùû ‡¿Ÿîî-¤<~Ëßêú¨£?= A|ñ%?Ý©ž¥}öb±£ŸiE­–Ü(¬Ý‡cÓóx‹ë‡Íê/ýpã|Aߟ¾Y!”qu5 oý2æ#ŸÖ`=g_?ÀOØ’aJæ²·Çê³süùÉØç³ôÀÔ_t7üq½ýdzŸð»`Gï¿<û׳wøj}æ¼}~FwÎvmÿÂí³›3g<öùvà‰³ç¿:æÚ‡' +p>ünwnüÕÖ,~ÝÙbßÉ^„É˹ƒÊ‹ËT(\f¼üê—bÛ |éÀøÔ³¬Ç80éÏ„‹³¦ã9´`?¼48[||õ丰ßÚ ^Íۇ߽ª[ûTOñë+ozdhTfäftgh”h3ìªüÓ8ƒÇ×ùš»Žzèƒ4 ØëSŒg‡ñDÑ+|žq÷i©ÛóÆkv†ÿòà>/Ò¤;ê¢åÀ°}F(–l§ü{ë&ͧkÓ_=$Éà5ܺÀï~PóÓY§Ï~„4ô?áÿŇæÈ_à‘Œ C¯ÿÿ›-þùû%ÿ¿¼ul?½\ÞžÛÖôÇåù~ôí()þs•žýx¿Ù/™âðz±[ž]Âè~«»¯uo¹6DìV»³‹ÅÕÕrëìÛ(BÕÙùj{~s¹^¾=»[n‘q¹CêÜ«óÅvs{vu¿Z³ƒõòrö‡†oMõÁ{üÄ8‰®ãþ¾]è«×÷vw¶¼g:[ÞàÚªÎö«õÅòÌö¤‹åÍbûælwÔµZØ,õ|{ö¯«åÖ†½¦É™ar½¸¹Øü|{vnäw¶#§º½rÖù»³wËÛ³× ÀÛ׋í™ë³¹EuZ;;1!g›íÅå’é K‚±^ÞlöÕzs…øÛÍþ̾¿ßm—Wˆ¹Ú.Ç,ηÞìëøL©gwëûžÜÿ¼ÙÝŠW›íÙþÚ¾ë®]:»¹?ƒ b»èÝõ¿¹Àpдڴ¹Z^0‹3Ôé /¬7‹ÝùýúXÇíòÇûÅÖÚÀÇëÅúR=ûÍMÒr\yìä<>›?-Ϧ‚j: ©fjÚal wÍÙ´9«2µQ5j£QÍ ¦{ù3=ó™žùlðÌgá6wŸ5ûë³/ÕùôÖôÖoýÁè:0¹}¿º[¿S+ÕÙL#1âûgµðÏjáŸ-üs÷ê¿êËo®7[#Ä%2 Œ”Ï2>[¨‰…žZ šXˆE×Ò‚(Z,Ï·(ZVgKµ±TËAËî啞Yé™Õà™ÕŠ.ã³¥¡èVoôÖFomomü®“GWZX—ÕÙFº×û÷zÿ~ðþ}÷â;}¹'‚ÞõÀ|ïÑ1ç¿ÂÇœK7rið×#‡ybóÐ ºpkTùð9vÚÜÜFiÛðY0]‹çKè‚?@åÑ:ܽtZÿÊÛÌ<j‡oŽØüåeá¿ö!Kh–ö±¸ûÎ^ß@Á¡*TÝ ¦?) zS0,êïyhj«'.Ý=p¹½ñ¿._n{™vÛɹ°Hþ[øØÅ•qoÿ}ƒPCú®ÿ2ìûFýý¥±8­V.j¯Yø{Ó} F–uçp\w÷Â3ëGïÛÓtÃûÔòd ä͈jðjeòkèçvI[ðÕÀÅÙÙ$8£¦ôš ËDìñO¢æþ£úZ:ŒúoïQú7ìÉð ­ðËN^:[ö;Þ‘å(ŒÎ¸ÖesÄ0žTS,GÎ8.ôÿðK‚'ÝD^"{‰«à°"´¿ ^*iÕ½ÙsñÚ!êˆR“ÄíF@é·ÁêâÆztíà)zÀ§>Vâ{08©¿}³#ê½>þ éöýC€ïᥠAÊìü´ð\Ló{ò×/`¹ ~ù@nû¾cpIÚ9¬0ޤ‹~zù™Q_vøeÖY…^®J;›þ쀺%UÜž¯yç×S_ùdò˜ F‘ ÜÚЬNŸœíÑ'›±|>ÝZŽ„xûòÄ,‘+ýY8¹Ü܆hHÀÅKhäöWÏþ¯ÙÃă‰Mcgqg;kí±oÞÝ-µéØÓ¸ñ…–½!W³™Xq-HKÇ…ïJ|.Ót<~è¾0gÏMÅ’¿»ßÃ;}V_/¶¯ˆôÑÍQ4ø&¼õðÞ^;ûb‰ääãÇýn×AOvxgfbêZ|_G»TŒWËžŸã3›ÆÃ¡SÜÔ‹øÔÇOÁ°º8¿^^,ZŸcçÃñ†›¦¥Ýº] /¹mÒ5'ÍYÿÿšM/4‚nv½„-¦¯³¬â"Võ݇E\`öà›Qäáãè;–Añízy{µ¿öHZÎD‡Üà8k?›csê÷¸¾åã ÚÑÎ….€÷ƒ™é),8#lCYŠ¢£Á× Ô[D 8¢ž6Ѓ6«˜¯Ó†µùÇúcL® ¢„ß:åuzïw¿…èÎãñ0ºÉíi–þê%€öЊ(n°â0ö˜¿iÓërK¤ñ/ ÇŸëÃë^0© ­‡eâ±gظ›¤€>ž‚ òÁ$öcåvϹ; ÞNv¹Ü¿}BúÝ‘fƒÈØ“øô0XvÌ$w 7X|0ž=2%½|¹»¹½Ý9¹l…€âq”{LÎD‹]Ç)ŒçWå΂nF닆=´Ñ…o/¿…É.Šºï¿~ÿAAkw½ùùÀÀÚVÿZ Þñòr÷‹ø Ôdø ½î¯9ëOýþ7H`€ÊчŨ#«çËýn}Ü".] ¥è;}úÉÙzqþfÐ`BÅp‘hö¿øçõò'ï0ç?_¯¸ž•)}Êÿ´nýŽ~·zÿ”»ÃtãÙð©QŸËÖ»rh‹èÑ´¤‡Ñ·Ÿëû3ÈÈ#y;K‘[y¹í¾øžßZ{ákΠW²›µ'gºý„.Ÿg£¡[±3ÔŒŸçƒˆØ£­áO†íÃ>üêÙ໣·b{¯{«»÷¬»éû€† àõÖ&t¹8ù.ǧΠin~“ø7ø/IžçeV޼¨vûy÷/éŽQômWûáÿóõáÿÓtbÏàw:IFù¸äO™¡V†Ø£´ó'KÓŠAòYÜÃ_ûÁóQÞü¥Ÿî k¥û±ûUVX è?“T?øç£"›ðšoÆïã­¢*xŸßÛ½( O†7Ãç²LF]ëv?ÀŸ¬rØlDƒQX?C¨Ãgà?øÃp„jmåLóŸt­¶ê?Ä`’éYÃC9Ö-EÿZª’,~‡?F4e˜¹ž>n¸yÜ¡:š½$¯:ŠØZøèzÜ{<Š®Œ(O®C Ãg9oœÍnÆ?€¼›áÁÏpFñ#uÿÚ@+ÃЊÃðaªÆÚÒÇ1uÂð¡µ0ìçà'ÖÜàï÷b|ʵ{öoÿ}¹6´:_<ûÒ´ëÍÏ£³Gwþ×ÇaEŒgðûççÿ¶ð[ø¿-|ì~AÔ›ûíj¹…ÿ‹b†© )9ÌŠ’¸xnT6IŸóp›øyœÚÕäyV^6öÀ·v§LŒ‡Û_ü7üËûÖ^ÿ~dÚq/AUˆ—WÆqžûÓúE!çMÁ)ú˜³%éßÿYŒ 懗& }‹øy  ʇ=ÏbA˜üZ‹øãC˜ô¦Iþ\H„iR>Ÿä„0Í%„(‚ôÑ!LU€pl’Q™üv‹êãC˜õf©ÁÄ.LB6)t Lâ_ !$×a>€°w=•“ßaùWX)ãÁJOaža¥L zd¿a-ߊ a1€Ð¸ è0«žW™¸Í£#·Éª aù‡€üP8„yñ[¸Ídž°:Ä!TŠ*plSë~„†C{ýãB8âÐ8`)K¢FÔ¯ƒpl:L5þÈ{¸©Ä98aX* aãRùÕ›Jœü¥’ v•$Ibü|‚µb›ºf”h¨ý• &(!ÿo‚8)?°íabæÒ²"€ÅäynûD•ý ¾þQL1˜ƒ]¤ÏMƒO’1Ì2#Î_˱A{ý£˜=Â`PümÅ_À,­`U`Š³Ì– ¶°ä×O±µ€×?*€ƒM9-ó€iYþf­…¿*€i<0Í~;€iü×0Р þVIƒu€¿ÅGçƒCÁ°JKû¸Ã௠«ô£cp N¸×Lû“˜ ]$£<žá0ŸÍ~¾F÷bóÏMÖö_vïåÏÜQMÅ(C»7à¾ä·~£ë6{ŽĺÊ&Þ?·‡ýFU=·­?°j‡X-ûŽãç¤9Þ£ã›~ѵ«ëÐ«Þ lϾ´ŸWºÀYzteqòWA—·Û£Ëox·éd<@Wjc<@WZÅtˆÕ²_õèò>:½.ªt…^ÍÑÀÐ…Â èqóã£KíÐ¥¡Ûœ;hw•âue9^uˆ½e] ¨K7|tzÓ/ºvõzõ÷¢€‡èCõÉRª‰í žÊƒàùчv‰.j ~#t››ä6¸JŸ'"¿‘žÆ£ðªCì-ëŠèJhÑ Þô‹®Ýp­^ý=‡èຒ\ˆÍ°ZÀêÇ]EªîÇa5BKÃÐmΛÝUV£ß0"ÁjôWboYWxx̧Â×><Õ¯ú–à uì¯:P0 lò–̈ Ü–}"̦uE eBµK”UÐPüFèÖP ®ºé72ªþáU‡Ø[ÖQ6~žv7ÂðüU¿ê[7Ô±¿ê@Àü˜Êò¬PYnÊÿ_ƒÊ¼ÝžÊüFèÖ´çžÊòq|He¹´§²±·¬«žÊÂ×><Õ¯ú–Ãr@e¨˜SY.mÅç3·§ÿTæíöTæ7B·ãb@eØÊò<PY€Ø[ÖUOeákž¿êW}ËáF1 ²ÔÌvÊ0'.}t"s±¦'2—Ã|>½[ŸëpÕ‘‚ßpJñWbo¹'2—§tÃG§7ý¢k7\—C9Ì!:øÑNæC{ÒÇ'0m<ÓvæÒ»õyWø §Õ!ö–{ÓŽç7|tzÓ/ºvõzõ÷¢€ŸØ)]hvnñÑÅ|罘ïŒÈ…êÐm6Ü){1ßo¸˜ï;¥CìûY/æûvç_‡áUòoÙy˜wì<Ì:€ù‰6«ž‡‚ÿ*X£I1\£Éähja¦ñp&ÙÑ•†ÖhœÖh:™üíÖ¨¤Õ~FÌá³§ÖhjîÆ'Lúˆ3 gHÉŽðnÜóïþÄc¼{¾@@€ìjï°1àræïÞ­ãݯz¼û áÝ_u½å¿ Þ!›à=˳C¼‡'žÀ{• ®y"ÿèGÇ»Ñ(\kÞs#áª<îVxWÞà áÝ_ xW˼çHæ)‡xŸ”ˆHêñžxï“¡+p€ŸkNŸ¹'âswK†ÐøÉ â#Ã2œ©›¾Û[„%›ÈS=FX ¹\áñ¯N~‡öñ[³?`7¿ر«Jîb%zN" ÿòäW× ¨þ¹¼l;H‘ÍÓ`©#ùh ÷ô¯L‘Íÿù“l5lR ƒ‰vRþ¶©L'ÿŽÔØv;È8Ç07†V¬}‚=~EÆéøß‘TüÀöƒLS‘„q$Ä1¢ß­¿.”Þ(~ceŠ€?K¡H ó˜äЮ~=XÉoL þXo‡ž%ã1íJÄÑŒ&Ϊ_Oø C»~cúÿÇs±¥yxsè/C.›,?¬­B¿~TÐõŠ¿Žã0ùßUj‰©Ùe> 9é©ê׳uÛ*’¿Î¨¿0ª?`TYnx.{V<Ú2Là KÄg#pâ7zRþ1èáv4N†ƒ®d"û-ƒN!Bý0èÁV—ÅãÁ C´èo´µðÄ ¶ÑÉpж±ÃJø› ÃëÿƒlÑÐEPyTƒÎ•ØŽA'ã_9hkáÿ¯-N•A*ËK†7¢ _Ó®]üÚ->‚V~‰è#Ê·RÕoÛJ)ŽýÍbp>0*:`vƨÒyC0Iÿ¶Q%GLü÷jq°æž,8)ÊÓ'Æ?fö@Žò^Fm‹µuˆ½õ×–C©²ô¯#ôõœÃ >@@ü èrx7¹òŠ{ã|xUÄGØ*ŽÛDhõ`ëÖ`Þ㼺°®ÁìD†þƒW²®Ñ?÷Cx*4lì¿É ÿÙ´ÄêczÿB¦0|‘/ mI1BˆlúWŹ#£G•R+TÄ~Ž:èÒ QLýÉ2A½_—ésÖ`g3eqØfãI¿†3@±ƒãñ¨¶YÉë,ÜTŒ!rÃãÁˆjÓκI»þuçP&žÍ6éÂ#Jø>GZÁÀú¥Ãìñ+©`Qôw×Ü^Ì7ç÷7ËÛ}4zi7wwËóÕb¨›Q’dÅh1j·'íêê~»<µ%ÿú$ûô4KíïôÔèëõɼ=}6Žx‰o/7ÛÓË“ýõòtu²[ÜÜ­—§'»»ÓO¬Ýïâ$?ç§?œ¬nO—¡á«“ôùi6±f^áä5[C«Ýé5[»:ÙíÛ½þî—ÏO`UŒÞLÏÏ—wûÕíÕéE¤¯wöÜ‚í®¯Ñ÷zya½ý¼Ú_wíÝžnNîoìÔ›K»MУ“í½AŽ,öºùÎþÜ,öçöÂõóÓ´0ÛÓ›n‚ÏË·ì'€Ë–s¸Šá!‰  ¹³{Ó6b[›¯O¾±VpºÄ xÙYk†…  *[â¼!ëvs»Fﯭëwƒ!Yãêd»¼Û.wK hoã\iœ† ŒåÓ°ºR¢k±=nèÓ!ô—ô†ýåÉõÂÐoÍ À3\lº§V'…=e³y}²X¯ññÒî ½—›õzcýÌy99? q‹íâç6zšLF¯Gíq³;˜á-Ãõɧ§¥ô©µðéé­”f@)ÞØtoäjâÇpãòøý$øÄŸõÄsÐU’CÂ×MZ¬+Œ(`[´Á\n776š›ÍÎ&?:ÙØˆ¶ çóÅí­}º>¹ZÚßÅ~³ÝFo¡ÒºßÙSF. 0kâòän»ÁøqV±“ص½vwï^ß÷sýŒUx³$©-nW»ëëJÍG ÿèw.<6ùW'ç£ö³[Ù¤¾;=?Yìv¶ÄA{==ŸFç5§ùÒ^Áò¼µ6Ðêv‰°n7+fÍà‹’1´þë¿Öÿüõ«?|ðïSú¯ÿúùg_|öÍéî.n­=Ýýbúõ?5öpć—üjep}²ÝÜÛò]bñ`ûÙçŸw‚V×¶Jïpó»S½gëkf¶4|€³à –{.ýKÇ}Šë€ £Œh.±\$Å„‚ûwÃÜ]‹=`ö—$#ÿ¼Ø@ìÖµO*P¸Õ°Yc)·¸{· è‘5.¢ËM¯(ìPCñ ×¶3Ïýê'{aióy,T`¹—xU£!Q/ÐÉæ ž»µvV˜Öíò|su»úóòÍ *‰´-nÉWŒ™ðTy½wí˜å[s}ìð d…Á/ Q+!ä‡{âc¿ò‘àž êÒ†ñ®Ÿsaþ畱’«íçÆY–z±ë–N@}¼]./l˜1¿ÆÁ«ÿÒÂÄ­—èúZTtÉ©¾¸ [€Wiý­0QÏ™0Ñ×›û5¶ pÍÕ«Å{/*C÷¿\ÍÑü«]õ'¢w—Ýø®Hˆ‹ºiùàЇ³]Atå $Î Ö—ãÅÉêRTû w딠㘒w½_ªíˆ÷w»Õë5ñ¼oŒÿó¯v£ÃWW·fåùi„ý{0¯âÔÛC¼G+Üi†KÏyÃ9‡õÚwG˜ÔP0 a "˜îÉÜXÌr¿½µ`íp×5¢¿[ažÞuûÄ1C»<€M÷®žbf—ø—Ø×r0÷°,7}sTNÐÍâ|»Ù‰ÜÒ8Ë1ÐLfHNÇ7¾¹Æq«¶‹FøLžÎíòd¾9Ýž,w·ÿ÷¾2ʽնÆ’$Æøp’@ÔÔóCJ·–nœ3€-±·ŒFì[kq±2!„¢Í¿Á~#$Ÿonùùч–Úe·qþp¼qž¯ïqÈêé22\\.î×òÑîØ”šwÖÚųÍå3­ØûûÝny±yøÉ.ð¶hÙ3‡F€3­}_†­Æ0kꂱP›¤44˜äB½ƒìèô¢gþ÷wwë÷××Î.EôØB9KQš&€õ륅²±í¶·•i²E†=ýÂïîî”@.+í€ Ìͳ~ë¶{ŠÂC.°·i0Ä_h£J,—dé‘y­yøiµÝÜ:œ¢RâÕEÀ7CùÏE÷ êD"uQÇeöë“Ä.Î77w+›/}¹ëÏÒ€'ˆâ×@®MÌ*¯Š~SÆfiØZþÅ1ÙšRWm0y>þîô}C$r3"—¢,›?ã}Š-ÄðòÇûér½ X~æ}q}ùÌ?·á~4»\wÕ öjHž¨ÝÝ`Ǫ°fîÏ—hg8XyÄgF|BC”`†ö+ß³ƒæ1*"T ÙÅúÝŸ—C9r¥¾wiZ¹–q¿¨ŸhÛ_í¥ÙN±ÁÇMXsÛ5¦œÒlq޵t©é€¸¼éV%öÇÓˆ`ç1EM¬ÞsˆùÝö8\³a’@—Ï¡³‰j Ù\Lï8f£ì·Öã””ÁÞ«ÛwÏÇ6Ûý€Ljµu:cI¢¿å¦x³ØrÙ_H‹¼„ eü éê$Á¹Ùƒ9uÒ.%¡žðú妮!m_¯ Û¶š“õÆFøÙÞè}s¿ˆ/»°ñ&5%¸' ÇÄ,‚D¾¾¿xw¬rBê³þo¨??¤áÀþ3Û7–›;Óп2öé(åQ>2is7Ò.1†f¾³ ðÃß‹p1Qi­|erßžôÐPv¢“Wz eUh;˜îÄ/–7¦äíƒ*XÝï?ŸÚÕ·¥]~F®úÞ@oÞÕ•ËŒ>½b°_.Р¸, º J¨;«‹À作fLŽIpN™TjßÖFlKá¿s1'ZR#²‘•¾ ¬öÒmÍ س¡ÂЭmì~o|íî6d:T¢î¤Ûôc £P%èsÏÔás¿:¹[/ΉåKÁ>á\Ûíê<¨Ó”¸AX‘(«¨`,ç6ýãI~Z°Ð¶OÓsMîg·Ò‚œWì–Apÿl½QÎXB’%~LÅÓÍéû>5{äy6`ü4…¡àçë•ææ‚̧³M,œmVX;Ÿ@ØQ£ý„BâÞíدvP|’ƒrr¿»§PfÜâR4äÉ,£Ì³¤ÙàdqgËNÓK|ç=°\žàŒVüá&AîAþwº/á¾¶lüÒixtˆôpå´ú¬°›n!VÑé)Ûå‚êÒ´¥3³å[±ÅÝRÔ½lL¼šðcoìkX*KîlD“K^â½×Òìd¸]ýxOÕâtFÌè-l[„LA¸)ƉDÇŒ¢£­™š+üþœËWø4Ø`Æ+hÕÃ[eê’5qó^¯Øj{»CãÓäÔïšX'; áÐ °”)‘08ysZ:v‡A­K»wu¿^ˆ1”%¦!Úæ狪S¦¯Ÿ°==Qp9†° ŠMG@»Çe@Ñ¢°±€.Y=6r‚*`÷ä¶UŽ¡ÎeKc}µÙš´QHFŸóá„­ºÅz>„udz"#Ü=w NÖ·É÷0\Údþ~å¤NÓe·Z9ƒ]{Ÿè[Ññ~±{# éyCU䣮Ž~GÕ$ÁntküʸÄ$Î@<Ñ}[îyÊòs}È:cæÅjw~¿ÛÑ^»‚˜ÒÉÒ–Ä]åúäÕÒ_3y9{Úìcü<áN:ÒN "Î6ÓñhmK=ÚL·"R.‹ÜGÞ›éÎ{Q¨÷i–·ã\¡vGÖ°I~£µæFÅ« _˘íæj0›NŒCcx¶·ÅL®^ œ,¬²Ñjhè¾ â¦QγSVA,;šÊÔÅ¡ùilžÑ¹ÃÇQ?—žf®È[Àq)aD1€àAlå0¼-m² ¬Èh»v9­ b`¾–uúÇÓ}ÌÆÅQÊn"‰øÔгɕ¿^»Ñ¥,+WC™4_Ã÷ki; èç«Å~€LuB¹7E.·7P&;fÓË<4‹ùn±êŒiâÉchá¹.¸‚%ÿ|ÒÙms{ yýËíúHÚh ?ɧÜ/Á)¡£tj¢FZ‹h¿>bÙ·äX£&tTe†>ylè˜Gº Í¶ã¾Ï”eØgR™(")Õ–† 7D”ãL8üìRbËI'aÉ@ÞY©û' †…í’{L¯c,Í]‘‰a×\Y ÷²Ö 0Ô zäjÈS±?®vbÛàk†˜õ¢·År_€À¼ºº$Ö F³Ø^|"“åµÃmÙýcÁZ‹m@5KÓ§è¿ZŠÏu[Gþü4Ã>LÍÆÙÓbßAìbXïÉ0¡ón4ÆÊE•H#§¶ë‰íw6ɱ]V6OÕ¤ï[|µ5ýy³†½èÊä‹»(IQïÙžþ£¿gØŽíÞN™ÚƒùíÜØ{cé»wZÏÿh€¨-{Cm%¶ÛG¾gòíâäjC¦ðìi9ÒpÖ½ì¯èí"ó·“Ýž\®náðéí¬ÑÉ3¼+Ý ¾ÉF’¤odRY#;[çç×ßupËåðæä²{[¯èm6TÅ%ÊgWù¡çÉÑçÏñ•”oH`Eý"kz`%üôt’E¯©ûŸÊ‚:ø*§l¬ô´F¬Œ°CâC¤¥=Äiq:€8ê ¯ôg=ŠRAüæäÊŒü[=X¤áÁ,wz:9ÙÏÅR{õìà èÑ‹ÞFO_iœÛ2f“ÝÜT>§¸ ÑylÛ6ØÊ­VðãÇ·’kß8ï¢ ½ÖâC{ÉQ¦vyifÐå&/sš>š¹û`.Æ0îýÃ?z¾Õ¸5ÀÆ‘`YŽÕqap²’×ü¿Á/±Ò–ÓMeÔïpédÓj`ŽË¾i@8°z£Ý“G`ËîÝBÍd1¨X_<5´°þÞ›2nõõp9°Õ¢‡¨(Ôœµ‘Çã§VƒÞ(;Ü—œpŸ”ñX‹á€îÏÑ[ {ñ #œŠ•nü8\6ÃèùÜ1zŒÂ²Ÿú²¸À¾ê–‚žïÁ­zp«®¬ Â4Bh̨ë²ê»¬Øg­ޏ˜„™jÐUÙSå$÷uðG}ÌyG?ó} õã¥vkÂ߇CRàN­oû¨ßÁj˜”É/¬†|òh5xë¤;k,,ÝÖgö!ÊôÛew›¤±×§©ôê‰~­é&}úàŠ¾Q^’ ÞÁÓJ "ïˆ\’$­~FoŽ>D£wOÐèè€F£À± tÙÏH9ºì¾ê·½Ñƒ\ @~ŠNû•utªFª¾[ÑbWG”êªÝ H•ñ%“ü0^ÈÄ–OO3ê:{$¹ßÐ4$Z“o*—éùL'™EÑ ÎäV{)È«Ý~ Œ EŒL&ÍB&Ô@¢¡žßii²_º$ÖKXž,ݾtuG•6`I'I"—&½½O(UÑ/mØ>ý /–·›}gMè¥R #ÅBçZIPJ®¥”,]g4I§e ½è/ÐQ:_yçâ0iÖ]äêáEˆûQƒ×ô½R½v‚N%tà'cêwnJ#…€×ºÜ«~C<‚Û¡½:uy¨±Ü\yóÑ!°Aq¬ä™î¶c(]HÃýNá/AŸõ»E§™_<å_ZñW¤a†|!L? ãßÑ´^wšÔ£¬‚!weJTþ< nEÁç÷r—·Œåa„Z§2¸/c¨FK‹ö‚pû2ˆa+7Æ Õ­áÛ],Ýõ–å`:„QÈ™8É ÂÞˆ)sEµ«¬E޶ËC´ý˜ÆòdŒ®¯ÝCs5ÐÑ\幡²ôÚ7Oðˆ@ÇI°u~ËÌ1›CӕΚIgÅb¥ã¬”¢Zo Í+w¶j§-¶«hþg*–Τ­^ ýsJêu§¤FAKí~>Õþ1À/ÙC@Àš.„¼Ð÷Ee|ùâ ›”òî8PæJÎÒÛåùr·[lD4ð7LdŨˆŠÑ˜&²‚Å]\cùŽøK³.uÐûÀúÊ+4 7içmüà?»•»Üäj:Zn½»íò§¢2.ƒ¼Í)ýgˆûû[»ÃHÙΉÅÁt›òÕÓí*øKØttà_¾„“ÝÛ—=†°úâÿJ;ßu¿Í^…iç+Òyhö’ЬB\]ë<ô'p6zΨÔÞ·'Úp[PW‚ã$ÜHa29vá`9€òêÊóˆ^úÖ qzD¬‡jxòÆ®W¥¶]DÌz±½RàØ V+ A$d”»ÍÚi° ÊNŠ`'ELˆååíî~+Ú@N½ñ¬.X¾ç¶òt-Ö´ôÞ],,wb‘ÓQ÷´§sy¯pE±'ܲpÄË0ÞÍ»¸<ðªðÕ/Ž÷“Ë B ašdãkmßL_ÕŸYSŸÙÅç-µ¯c!b–/lú*5Ð&–·]ØÏ‚¯xÞŒã\¬vÃh,i‘Ôû~T)¦UÁkºÞPP^ÆËŒOÇÕH_KÝSi™ŽÞE¾é¦ÚtIúi>éCcAAŒxݤË—y êY Ãòj ™CÕ’&‡ã`y|ÜåM¬¢ãðc„ßMƒÒÅ0ánCG(îînµø—:†vKr!Ó½ÊW÷‹-ÞX\!PÏÍÝUˆ,Œl}ÛPÆ!†ˆÇ·‰ÂÁ’ÌXJšV™f °ž;ÇÐþ­xî½åtŠÊKÙEN,n6÷ KT enï)h€iŠ&‰¥G]ûm†$o—=åuëÀM™!„]]ŸðÞuº¯5WJöÚyÆ ;îØš®è<¬Ç7Zœn.OniËÛÍýÕõAøWšs «^)샽›Q–¯»«Óó%Yº²ZƒlD\ô\_†At6¦.@‰\åa"W׿1Á€§¸¢zuSê:«à'’w÷Œ#]… ÑHÓ7¤ÿ!‹bS×,yö…ÄÕqŠÅuu= åÎKÁB¹ûä´wÑ/B¬{’\†¾Õ‘Tß:rnVÇéè€-¡_©Þå@¦–rmÔn9p;È'ò*ªO˜ˆ“XѦÒÓCžØ% )[Ä(oðFÑœ†0)60pæý:@"L+c1êî¶7ƒÀCü¡J_ŽÊ¨4Åž*}ôrCý¬×ШX<èSÆú/ÿ•}k—7’å÷üÕÞ=cRVQù~H=³§,Ëmy$ÛGr·g¦Êç E&ɬb‘5|´-kýß7âF€LR²÷ƒ% ÌD€@ £¿², ³Ësx&è4Fâ,×,ò98ó÷Ó_»{Rê÷¢DÃcï$#ó$AG™®‘#ðñÞ’ÞDÜcQÞwdnó˜:èÍœrZH¬Œî©Öo(ÆE Tö T2ÿÞLõ1[Ô é’’1á,ä›ÄÁ\%«JϼÓUïEwEþÒÆp• ¯¨wÛÍrýþ’抔?•“®N»FcßZb‡·ÏŸïi™;&ÄEáKè‹¿úLäŠt…€¬çÏ%FCz,-ëF¸§ßñ¨îdTn0ˆ;‹F+ÛÝ^Œ´¿ª9Š“º¹ædjNJçqãCpõCš,¥‚ð ‚ûïÅñÑþñù^zÏÂJ&b Û-âhô‹òd´ÃvÖ]±:„Ðó$"¬gKjšˆ5Û»—C‡bCS&4 _7«®Óð1ÕGz;މɥ!4¤OÑ&±ðY=Wþ °’³FònZ_´[–ÏŸ–ÊWîM¥Q‚­‘˜=ÝÌc˜kÍ=ôQmsÍÏÕîÀÃÄz-¢ fïgën6eëåfŽøì™Ó18úo?ÛuïÄBp‹°)±.p–rK„ý¡›©I´U‰XŸuA“â:µš vCΣ(±ôöŒ98XuP]g3Óoµ‡€äÕgÆh73ÕpÚfg¯Ù¾£¼%3Ýb×8ƒ°1·êo³ãÎ’“—º¯9ÀÔ^ ÿ"©kéΘ0údd¾õ ¹µz›<»`‡ t¹jÜ”4UeÚ4æ‹­&|Ú…ªK (]IØÒu†u“»ãFïZ‘¤¡£ ³Ý…I)\¤²³i>Óü÷‡î¾ûM ðüLc¼/,šµ‚É“—*1m‡­¼%nšçªtwk ñgiÚÈôWKrBS?VlÙÏLÐØtÕOhéÖ†=çBÚ-ׇwÝB¨F¦.r fb0r7oS|ñНWÈ;õË$y˜¦çŽf¦Æ²Z+¸ØÀHêÅšæ`Ãà —²z_žú±ð~Räæð öœ³=ÆxçLé¥|‚ñKx²e‰ Yk|Èšìª3À¤iß~¦_>ÝâÛ;ç—ñšSæú·HŽ3:ãy¢U0Ëã:løúf·KÕô†”9Âùü½ÏGïº}àx—ÌOØðo-”0I9RuÔÍÒvFËÜäd¬¼á/Ô/ÎG¨zP†DͲ.aBÍ6+;Í;dßlƒÅ×GÍ}fi¨³›avuUç£j"Lõšõ+Ùq`ƵÚÛ¬ÿa÷¼Ùn½êb|­¦E9Xý:K9éeË>,|TY£gTx$ÏËH|LŸ !aJ’³ïzàš~ÜC;§8ëbŠ’bÐÓŧ}LI™ÑÇLÞÉ””ð¯÷½Lgý_I•çç`IÅîÛèÓ~¦ºš{úhøÓ•:ü’ºÉÍi’'Œ~Ug§ ½W}ÒÓä-³gÜî$Ý[l¦»§1C$ƒ5ž¥ºž½mǰ`.†A-í/õ¼õYâ~ü&Ïçí¬ÛKjÚT¡c–~?/C䀦Ò2ÁG—tÝé4Mê`šÚt7ß"ã—½)…(Ã)£Ö*(l-†³7Ë62yX0ªE¢õy_Óµälƒvï Òózª<Î,çk×µrÌ©Îï¥zt6Jâ,ö>moóØÙ=8=‰d´'eÝÐ=÷ÓŸImIó" uÒ¼ª#dêl”Oó&–T— gq /Aþ.{MÄK£ëcÜ4¨ÉnÜBÓwਗìì-ö Ä£T}yÄ…íô~2.‰lC÷åA±K(ò#:¹KrTë—« -z`»ìF¯ÞˆEy¯‰×È,ãn§Œ4¡A%{v̬ۅÆŠØN¸èM•;¹NRV0~–:€J ˆ94Í/²pº5Íͺ÷ªìTg)é6tFJ'@W°Iõ„tι ƒˆ–GÓ¦v9W£Ûv7—…w6ò¯NÒop ÏßmtšT†*‘Øìô’vôõ‹_}yE<ÿwÚYÿxñ†Ô€_üöÅ̤¶^ ¿õÅs;úî‡KkZ@êèºüÙgn‰ñ¸ذê‹:ª/ªÓÌ-ì1“ÙçÅæ²¿Û£…ßx]˜×*ž×@ÙoMÙ7œb–ýq÷@—N¾¯‰Ú³‹ôú…Ê™®w+hƒlæ(Õ >»ºÓ¶aTIaôÿÕc®[*ú.^,i¯ö Œ& ™Ýc6}˜¾ëÖÝA䂨Ô^dðQ± NŠ6žj˜øä¡cW9sJGrÀ *Ûæ¡ŠàJzž Úö¤à<å•ÙC؇Ôúc’=¡óOžiÝh»3›¹ŒÖ`äeZ¢Æ ùÛu«ö1ðåæ½å€Â½ÎZBWÝ,U?R3æÌ`ë¤c@ÛbH»ø`<èe¢Üñ‰·[š-bš1–ƒø >×ÝT áuX„˜sȌĀ×îIŽìèý•ª×­ÖÊì¾¾¤Ÿ®VSõªe/BÜ nk ÐîÅíNd=©ö†•‹¹à€ü*'ÇRb¢)#‡òxÐìl‰g3ÿ)€Mšù:ß2, o'±»Ê<ÓÁê,óÓO/ÉS±(±7‘üÅ•Ójð°!úᦱÙnZ³º4Mí+âM€`®qŒ 9¢ 1Ž<‚•OþKÓó˜´oŽ5:» vO%=8‘]ßí{+ELΊ´ úÀÇnÎFU3ëæ_ûxÛí;˾>5ˆˆŽ>1Íj”÷/S'rmºNj¶éH¯“Dþe¶“ët,‘H€€áÜZaPI·ƒdvBí*4û,Y}!é§’MnUœÊmà“š¿}rXžˆš}ºáH±Äß0ÏõÅï§uÕ3Ü-ÎÌïc‰ÉQ;鯋ãZ¤'ÏNÅ9þÄ;á˜\¥ sÁ#-÷‰ån{|ß˽‰Tõ°œ×Xk3ŽÁn¼cÛ…`/A“=kÐjT«a/N씘™‡?K¼BÓ«Ÿ^œ$;ÕO¤ÙC>¼£ËÂWöÔˆ}üX‹‚ËÎB6°±†&½î¸¡ˆ¿M¶a”ÓED/±÷Ÿ2p:o“ç'¶‚›úPÇŸ‹1bx÷fO›{c5úü =—k!¸s'ɳqQ•„Xë=]fI? ´’'“8Ï‚G“O|= ¾ÞÈ×û7þÚºlÂ.Ÿ~.º4 ÿ>×¥(J’™Ó?9IÛs“T*™İs“¤Ó™¤½¯ïþä$ývnDø:gU6iÐ¥O–£÷ÿäànn²ªÒÉÎ3c’å©‹C嬠VUYô±Wšþ+µ¾R§ÙéW"}ç¿Ï’ƹ^g^âPîŽwš'Zb“áæÜ‡ô;¿õ¿Sê 4øLøuvݦq9dtšË†UžW²Ì3EÀ¹£3 ‹f Àžn±°ÃXb—¹âi¨‰$É+6‘Dj"Iˆ˜HjÜÝ“º»ûÛ–-”Nó¤úfU_£»?Ãfr÷oð~š¡ñbx©‘pÝfŽó;‹ù€/]Ô˜(X‡í.æawKÁŒøzéŽÿíh?ÄC©·ê梉º[ó­º(3Ÿìqžo•KT•E,ɧoÌõqðû¢ÏTMx]Ÿç[e÷EÝQtª>Ïí·Êí‹·£\X=`(a¤Ù ,Hq!h×r!°ñ¸¤3 « O+底oInÈyê~ëSWÊ H’È€:Îq–sú'|£C)ŸÄÌý_ŠTƒGÏo€‡ä#ü¿dþ$Ÿ´ì¸Äœ¨nRvRcÎx´´5fÜÃÙßržñ9DýìD3l¨ûˆMÙ¾1ð9 ¿\¾­B§Æ]ø9ýÌøP¯>geYÁ½ÕÑÄC¸âëÅ æ¶±K&Ûlõ¾"½A5Xu‰Ø/GÒÆaû0¶ 4DëÀêQp¯&5ëB7Â.6¿l–Éã-ß̺ÅûŽ(&õô¶þ⊑Çr™`T>Áç²3”CïYl~ëƒD·éAd÷‰¨ $`?L*D»†\¡YèbSÊáSé[ƒYØŠ¼qÒJ½½ÖÊEGkœš~†ñHçø£¡:>$Ñ€x}œñyœµ$á97W»Çýƒ[aà¦ÍdGL%uö0X!;¹8Ç…$‹Êõ×bRÞ sÅ-6¨o êçõº©‡“HŒ…w¾!Ó‰§çj7Ðây`„€½­GñÜÝ :»~Š˜áv ýÆŒ‡JÔ"ê……$±,¯÷ZLú‹ÀY›z•;î[smcÖa¢ v4}»ëßÖ‡6#š8Í@:kXú+ÚjPš Œ/ë4äÄÀEÍÒã"Òšõu‰ùsÛ|ß«‹õÂi!5nØüžt9¸÷:áy=¬vˆ^Žrœé>Xp¾\È@ÈnÞÆ?F…(ˆxÈXñ!UØÄëNÅ+Ójm¨ôŸ=Äð&xN *í—CðK_-Ž<î<Ë£P K¯v{ÇŸ_« 2R®?(ʲ¹c3·5N·+/:Š2Ž’<->á×g¼*RአóëµZÇ¿à ÞõÎà×¥¾[@d¿JÏ÷%EÅZùëô\ßÖww®ï()¡Ñ¿Ê>Fw)}gŸ¤{sžn¹-¼Ê?Fw%}矤ûpÒwYÝò@1)H gÀ‡&ºðÁtát>ü¹êúð!gQ·0Ï*"(Ã`.óÝ'™Dþ`±%øºÒ¦z²¤Uð…S(I:ÿÇäýMt>OЮ]q„ˆ‡¬Z…v1ïšË4Èt_*‚ô£ŸdýÁ¾éPb9üŸoïï±kßqæ9¬HêÄEiñ^ÚŒ3˜w£×êíÅ\{ûÒB 7¿/¦³ƒ9qº¸êu./M£©$i¬xµ­»Fó¥wåáN×Ûé¼'…;Úe·GB%X ñ’²*w‘­ƒåp¾…Åzìc–-Þ ‰ûn¹‘”™ý­\·b”sÛx~%?t×Iþœ8Ùb(Ò{ÆÑe!ó‚´„{æ™·6#¾B!ùê:奯°OíªgK±Æj¢ø\Ոϣd ­8¤‡Dý’¸íC“cû­g³qˆhr]€QÛH­òaÑ—ˆðgôbga'wûëyÜx„To‰ÍR+^/Ë®ZOºî~?‘@öa•bĸn¹Á öÞ¹;[Úxó}¨,›©sY “D^ÔsÎfº^aIA*Lˆª<¢=ó8ŽcžIôZɉø¼sÜÍZe:I¦à¬õÇe\=®Ó|€Ïó)ƒgÍ­Ž‹»špø‰AêD3¸ ' ÑŸ îÈUŒÚòâyÆ…#vÍþ•=N (ØÀþŠånzO‡pÁUÏn&À{éÅ/R|§~àûý¸Bš*nõ fôxôyòÀÉ?·\.cÊCÛ‹Ï_e«# "u&GGM¢¿(r…z“󂟰”T:a¼‹Õèò{{Ÿ!}"*cõ§ 7ÑÂ\>oïIú(}Šÿ"+‰'YIƒ+i%ðƒè·_èbY³Û¾Žkm•‡“IšéШ9Òæ"%ú¸ÒX>'M  ¹ºÐæ†'"¯õˆA«ôYnlò<sF>;½7ÊixÏFxÅßCÅ$g4X\$W©‘\¹¯•“„‡Š+OZY׎bé‚›KbÜ‘,L”dÁÙ nâÒ<§»} |œÙLHþ)£‡²IÒ(©U8»¥Í®>›Fül]êäV~+bE#5hNRŒ ”jÏÜ\§Ei´LÊš–ˆ¼*r: —ë©NkU66Ué¤v´¢ÕhÍ„Ö(x6›©ÑêŸM’ÍB,Ú«„G U Vš¹“Ë(´˜ŽsÚ9u,)¸©NìE€€ÄÆÒjÄ2wñÄê³BljÄÏ&YZæF,µ;îJ×ÊÓŒI]©Ú!«ª’Tß,ª Gêrt¹7zeÂ2ЛÕF¯Ž5ê1BNn\½áäb#¡W'—™³Áå9‚K›\`p üåNEú{—¡ÀYAÚ¨°áÏâ—Ä ï{Ör8¯ˆ±ó¹»&eH–?MQõäÏJåhS9äRŒµ™4•Î ÿäÅO£L'­&«Ü šó*vëhÍ4·9i6/Ò,“›Ú¼è³ÜX7¼ŽEEÇkçäO§®ÒïjnŽN%Pÿé&QªµYÈNýrj» ¡ì'M3‘Jœ]Q:± ÑŠzˆyvü¬Í)ŠæÈ]Æ6ÏÁÓIûóÉzç) ¶º6öºõ"›½LD:ÑAUžOI*Ó'üј<•æÈèNŒî4œìÂ$”6ë1×±ãiýAêÁQ.?Ðìö(§Vãé´ª1~–+ÔžŠGÁ§E-‚êí¤Ý_½á°E×¶TÌ€Cµ£¥×ŽR U<mMO>-BùD§BÞWÊIœÙÌðÆ“ªV¥Íòx=©ÝnÚke7Ì µG¶t©ß:ò¸S’t^´˘6ÄT†r:çÄTV¹NªIíÖ”š#G¹ß@ò´I×"s”ûö²(ýšJ»ž4 ä”~6Ð._9Uç*§¤`Q §r8OGŽM/r*g;v|˜ûi*'ye$ç˜TÑ™j¯†Úu~"§‚&%k¥SR¾(Sy•Ù¦Ì'±íÚ,oO ôÉú4”W–"§Â§ã:­òƒÈ©¤´Y;äTæ½^??9EBd §Š439•‰æ¢¥Y‰®ÑÔhÜŽ5§³@ßÓ’,t[cžµu ¦´“Äu1…ˆëS1UÈì‰>»¹FsddÇŽìp®“Ú‘ÌQ‘c ”ìJɾè‘]%»Ê¼*…NDº8·É¨šm‚tÑ„ŒBÁ4/œX6å“Bu)}½LKNe™œN2eUF¡pJш0ô£_ÆÔ-#š#yœIÓ„õqN…0æCÚU8ÅvÇÐf¹(8µÝ:PÔr…£#(‰Î §*u4B (—fhĉ,(—fwMu'eÐ^âê©+©Ý¨p ŽJýlÒ§Z½pÊùtgáT•I_8U2ðL¶Aa©êͶS¢*?M¥l1!¹*Ým¹IýF…“v.Â)p ?š´ œj”¢„ 4§1ênÓ,ÍJ²Ÿf{$§ §ðé"o<ƒÈʹY{*ÒÌMsØOUå*œj-Pá…S]&œòIåŽ\i6¢EÍ^8¹[>-ÊjxHûP6ië`“k©õÑÔ$ñ9ÑÔÈÜÉÉUF4šM4%vų§e¦c·›`†Ò7X¡Z~Š&mPM­N4I'"[š´ Dßùš2ÑTÖqj÷<‘MÉ„˜mЦ¦ªU4±mÿãv¥4NkMz]­&™1ü« ±pw;yɉÐâ)Ñç+~¾ªü:j;ý$ÂI¦D›E8¹[’uU¨ÊShN)W8+œÒC•=OšÌÑ^Õ‘£=­íÁã´obGzОÕn1µýT:é"â+75$d³Ò)åU¥Sšø1f4µŠ'mÑ%š…h}×ÉF`!ä^Ún¯ëóCùd½‹|Êœò~•ñ5Kȧ4Á”{ù”’°[:ÍW™iiÇë¹Ì¨­ƒˆ ¾íO²ÆÂB eí"¡œúÔë§$Y Eב´/¡hÑð:ÆzÒØñ¥íª§6¦§r³ÍiFç´)PÖ¼Á\Kû@FYk·[©õÁ2*MËôŒŒ¢Gݳ™Þ÷…ln!¥fJ!;˜íÌ›.Âö¦ö¦ m)k’]aJR룠ßùbMd;GM;JžJÐÁsG~XúàgϗƲcSmÿ ²gü'¹Ç ³ì8É;s1ð[3d wÀ›‡®u°1ši«® ýv*Ž”çëéîîs~öíß^¿r‰‰â³_Þ¯©ë´¤S¤ÖÔ0êž„t4;L¥fêši½×Fª“ ÒØA¹M—­}±ñ™ýµ·Ü-ã—vÓõþ™ ÐÙ£ÆÝ²×!Õ?¦µ–÷(=–êŽì¢á@ýw; ¸u`öi‘D.ÃT Zí*Lr˜™JW)ŒWç•E E½xÇåÈW¯’,4ö—™gµ…רêZÅidàZZ€ôÊRg—ægvá#+ñí dÙj³ø_ü‰w—.ôH¼’’ö%’s$‡žAF³2§îá(í²Â4ƒsé¤,B§°1' P÷V!T†äÊ,¢0Eî©dòŠÏ¸+ÚýðµÊ¬I¬ÒLƒ{$Ñ ´vVsº‡‚éÜåwør@î%šÿ%h—ˆn·:«ý ¼¥$·Ñ_픽Á‹ã©²o%Ér:o¯X?Þ=¯)‹ "D¢„ð£úÜ./&æ†iJ‡¦Oå2nŸGA޶tP>}9R$Í^ àÓ€]l'F27šïBìß…ÃÉ‘ô-¹b¾Š†µ-û>Qø´wz¯8Ø^иæ y&Õü½§V÷=PêË´qê³H'|´p{ø2„A œáó­ÕróQoÂ4³çÏ–LNºžÆž’Tc'1ý¿¾®u§åæö¼ŽÕå;¤@û²‡rI®ö}x~©}'ÅÚ{ú$F²ÕåST =*ý êpÙzMÐÉû‘ÂÄ©i(/Eý0‚èììªtçhPér£,µq¹Ë!Ö¯–!þžÃÑ´R«ÔxeyéåˆEVŒJõ ®¼ñ¹K®–°•Oj6øk%ï"Ý ±*ZôÎÀNq@Lw;MõH´ì–3I)ó°³úÁ;WÖˆLœU3Ò¬Ž±8<æ1§À›*$€,ËË/_eY?¶¼² (Ô _Ïw††F(î×Üã ¬z…åƒxÞ•eª?•bL!zÆŸî!m,ˆòþAcB{ˆ#cÉáÑ öTa-X4nŒ),Ò9‰1Ì3Àlb6ÁXTþ9艬p@¯+èÇb¤U,?ì„)×ÿ@·‚t=¶*·Ó "Œßß ¨÷âð0Öš©t‘±_N.%À4Æ|•i¬; }ŸÌ¸ðVsÚäbôäáøî‰ˆIzî +¸OöˆéÜM|jí&ÿ5ÖXÖÎÎÇp@i¤qí=RÛT|“þ=9'Fj”/Oh™Îø¬cýëÉ¥Âma¾—›ãÝžì~¨Ò"Ä:C– ؆µI;G™L¢Uvu¤Íö“Ù»y7o'íüèÉDd¿Sª° _¬;´ ¬C”/æZtt’gû'Š$³Ò®»'ôžT±Ž¥Ó˜&ÙQ,²@¢¢Ì1ºûÈ«Dýa.1LÅ[2=üAFá<ŸÄ%ç‰hšž_ž ú¦ãwþã2žƒ•ÐÄ-g»#÷†ë›Ò&†ˆÿIŠ‚owwZ„ ÷pª°Žî‰š² ü NiÎ<ѵH·Wç‘*ZI~B‚ÂÇÒ±U _ÁæA†ªÛ €+#”³h%˜¼³3òS0Ýz°½4´FÎÉ2€ÄþWƒh½¥Eë-$~e¨ H h{Ó%ðÆgVhj-˜ÑH’ÅÌ1‡J‰ùmÜv|'B–þN厦š6&boÆÒg•RÞ¨@é÷Á­˜1Ü~JX°h]M³{é ¦t"Õ Ii‡ò*’[÷°]W ù(Eo¸ì·Á‘Äç†Aê•^†Å]'HÌ`Ì;Zº ‘˜G:xB 8@¨¸ ƒ0S¸Ñ© JÑL¾wÒÏÁ &ìd,ˆ#rÄ ŽÂRnô¼GÇsPØ z'Y!Š’±™«DR2Ñ[¶Th·Ȥÿeµ/" "O o¶’UÂrcÓýÏÑ•YA…½yöÀ{ÁĂ֠ný,OGqÎpŒ¯ ¶V+¥¬¬Àt½(M0oß/h XSð"ØWA)Œþ¾BVÖ̬ZAõjÉÑ#QxPc"€>Ì ø[S$!…B¡ïb‡ÙôÛUêï/L¡ax©ŽýNoy‰\h6Cej ›9øÓº(د*þ¸ôÑêô¨x¬Æ.².%¾tä„ÉKCDÍ¥cwÜEƒjßýý‚ëPtà0«]¯î‘?1ÄU¯\Ý™ãp‡·V—„QáIRí<Äâ»3.Z«•Kmd®Ðƒ«+IrÂħ²ÎG,<þÖQÆ“€›Þ|äÀÂVîD³ì®›Iœº•;1<ÁXËxl÷£ÎùèB9 (ÈoÄLœ©ƒ²’:(‹A”„óVR…ŠúŸQ’R 2¢¥¸ Cïz¹YœŽ}A–±Ã·œâ²Ø:C‡Öö1BúUã-BanœÔð£BòDiú (†ÐwúZÞɤ›¯EIGó–®þ¿‰‰L“¤ÖÍñWRÚ@AõžÛÑ/»Žî«‹ÑsÖ—h"Çïà¡ÔÚ¬Èq¡†8>Sóår§:èâ#ꎃEÄeh.°Mštã²#5a>ØRÀdƒHlr‘xI21-H: ‰0•þ«P…Çjž¹»Î¡ÄßúkW;¸nUYoEYçèþK\Y3æ“ý’Zî×Oà¸äKs2I&`QUâ·Ü)ñ X˜mÃfuP\¥èÀp fLLü+ÓÕš#²ÌÊ¿0Q ¬YàŠv·ÛîB÷€ª¢bÔ€^÷5žš ²£¶ŒÚÔ–‰£Y^ ìgGœp‹HäºR$Ëh @ ûL´fêB*êyWŽ"‚¡çÍáKUÄ&ðæ°ÑÜ90{ðªöêå8Û¼ ä­ ‡öj¡õê˜IësÍv¼sJÁ­!"#bÐ툎¾Ò<°¯{/;K~£H‚–ûc&´6P£qÚÉé)hí­å>³Œ4}}5Øßr;—S5Øï{«d7ÛžõY•]ñ¾÷²IwíR0‚D7>è¸4¨©sÙE/ËöêÁ ›ØZx…“3L<9éÉmq$v-/úäLwË«N¼ ¦\Da<îj9s`TÝ™¼ÞVÄáªç9QH¾¿oÖÚ;môªùô«Šg‡G Ùãëò@n=šŸwü,úŽŸûT/{ЈZP–g 9¦¯È¿Àmd~kq…!„ÇsT­P=•ñì`“ 0çæ"[YA¿‰ì3Üœ2–ö‘¹wøæÞÛb¨=k$5pHÑËê …"xˆ{ l'Õ(¸–i‘æzzùÝ»=ÈŽqÙP·þÉ*©"÷ä3dåE/úDþ¿jüÿc[L@˜`{÷©ZœtQ0üÌG"Iß:%‰aë‚'«´à'$`ÃYã/iݱénY!Þî|¡žÕV2tïMÁkÕÁKî\¸›íúŸ¼ÓYÒì[ü¤JƒÞÏg=^{¤L4EòPÚ+»ª®0S¬ÙŒ=ºýjjÞà Ø¸²}wØ·kßÈc·)J®G5P;¸ÇÆa±¬Ñ~zß:œ…U%ê†×]ÌÅ‘iÞ§°j9?Ó‚øB|òió¦"½>4C½kZ“ÚYÄåEjíŽ$£†<‰êÌUï¨XÖJ1_¢S<Í´‡ØÒØ8,˜ÃõT"ºš²;úl…Z¬ïßÃhsͯe–eм]éÛñ¯qÌ£•¿iåå–îï'Æ%ÏRÌc¤œàbPyô„û‹’8=¨Ï_Jâª?a¢_~,â¯Êž¹²êIø%Î'à Jo$Jw¢=%èAÿÇõı &ˆôTéÉ÷0ì)§ÿ/Æ\j!XѾ§4eAq†¦áT¢#戆~J= Qב‘.ÊùŽè­¿Ž¥Øò¿QGÿ§OQ–ž)!€•âþ?³|20¬Ñƒ(ÿÕÿËa üK׊GdOäô¢Ïsy¬$OD¢Ê?2žûG¡r—©”ÜÛWµÁ¿ŠÀ¥ '2w;úâ‹›ñ1@»i^þ…ƒ`þúש!`W "uyéQ¤{|K%ðUöŒÄs%e–œAFHŸJt®®}è/õø¤"X:1û-Ûg8©¨ d'Û= nºÚH£ÃáÞ“ðaÍÅÛ¾O_Õ’ºQõ1·³:8ÚÑl7Ý£øÊNi¬9^Ûaú™zسÏ7¤üÍIõ…×53Hë¹ëõ"êßqo=öC0Vû†„Q%YÃáÎ%Ê™“ÀËÇÀCd’\D­WY|¹ak0{|aÙû¹p à‘hv¡X«EË0¦•žûn¿n§AôTÜÊÔX‘©c‘®VQ‘a¸Ï­y¼CA˜]9èŸæðŒΟ.¶&Cj R{nå«c6£À<Ö2¯gÈQûwU{a 4|AÞã›ç€ök©s4YL‹®Xÿ f°æIê#é0Q Ü@‹pK€Çpј®H±£Í°ÙÁS^iÄ8¯Q Œ·xôn€ÌâºÒî ‹˜5عÝÓάۘfdôT5Ò¶Où¸Ô"àƒ;ýEœ¢Â†áD­ÁøØ}êÖçΪæ÷3!;ìò°˜±gfø ËÐÖáB-ƒØº#`kºšSý;!û¸ ül¬ èjôúåo™,Î×},N²Ùê訟]jŒÁ\+îÖÞ0yñ8[ýJÌ ´Ž»3qgÉ‘ïZ¤Çé,— 3®áv˜ø ¶ùØÄÃ(jŠÊÀâ—;ÈÕ^ î4WwRtk@-H/ƒÇ€ki7»­šB£.À†6s{PŒ½ÏD«)z2ÊfG±¶ç$FÂðiRÚU£à‹CDú@ª0H²‡_òÙYði L‹¼yñãÍèåW\‰³•#U,µg)•r‹Úñ‘HLèL¹–1z‰V½gc@±ŒeR?$ÑÂWVvPj!0£t²c>ÕÙ/ØNJ#"gÖÀÛPôoG& si#7·¾Ÿy¨®/H|Žw£[’Ý'Æö•íK<Ä òRÍO¹ BŠul¹Žëª_’ÕÜXðâ‹{&²zÀV¯ÃÊ I ÙÐ<ÈÖâxjNÓX3!©6’¬. Hâ+^Ë”ý«LÙõôò·«Köß§I!OñÛ´: ‡bÿÌêÕVö??þò#/´üxùò^|Ùü<ÞˆÎGBÃ|–ÍgœñŸ©@¡¤Õgy(”¬®< ñð%C(”¢º¨óÄeK J•* ® %çÇ£pÍZ…B)Ø4”h(e¼½€Jv5 ]kúN]Uˆ¢)¿ô~Ĩßÿ¸ÈI4©&üj ÏPß½D:ÉÏ®â,âŸ4·!žÈœ »»´JTü$MtPú,'®±À $qãš‘o&™SŒUôŒ¬Nã­Âž«²ŽÇÌÉ D˜!_ðCŒ¤L ΀ RµUI- #µ HM #•[%Ú¿Ì%E¤ú‡ ø"·ŽMÐV:—‡\6%ÑI ˜ÄéIÆ&gÆyfqþé$odfÕÜÓ[)½Úl \KîžF6HS•Fq¯=Õôé<³6.«ËÜ)ëz\ÆtfŸq;ø¬ÌÊŸ‘ô4>Ë'UakV!ÉnͤYȧ‘ð™>-[#mÒ>ä3ùä`Í´çÔºŸ•uyŽÏªØ?;‰ŸU½iÎŒæ óy2Í•ŸÎ: h–ö!ŸIë€æ€í|&Ç™ã3θϪO'K|V¦q&U}¢r& gfÒ‚ç a4þQÇ”;-l.eÂ0Ôîtˆ*hÁó=NÓvá4/ѤYa^Ñ=“:(ŸI]àk8Dɶ¢‹€èÊHa³£ÂkA;]ßüºIû×䣃u“G±nè¼V׎àEÀkŒ9•t]/ˆ›pª ·§?¥´2YjS<@%£ZÚ‡Ü&­ª¥Q¸ž»H4¨ê¬`Ý(}*É>X§é“Ã0l52KE¤–:v¤µjð…5gh³“¨½ (º\ÛŠ™ÓBÙ us#v’vþì÷©¨öçŒ Ki¢m6¼[ò9ñŸî– * )Eñj\Äɧl‘¸8i<3¸h.eCŒYýÉ÷ê<|ïÏ9“ògÞͲ“wô_VÅòýÓo/sF}°ùÏô‘Ÿ§a¥§u0–è#¶"ôóqZìï4Cý§OÛà†—²í+Òÿa•üÏuÈJHdþy ØEYU$¾ —<Í0Ôjíf~¹]\a=Î2±iÈG9ŠÿÀ—*8I û`~Ì…QÒt^Âø’µã» P¼á°£œÉd´:b.ÜJÉãx{¼GOj±³‹Ñ×’ÍqÜÁžr Q?Áã¢) Ëï`ø~þéaú ™ªêyŸ·ûÙ®“(E^@‰wA&²Å -óyÆ‚EŒ¯ëöWuML7ÓõûßD®°ûa?#8ðË L¦E¶»gêè«ù9—½^ŽÛ*g«¼7Cx¡³.††[aZ b˜ñ¥‹E-ÖÇ9-P–>¾ßk) @}‹àá¸CÐÜQÛœÍ@Û3‹ý² ûcgY…Vó›]qsLÐ$çe¿ò'ÊÒ¢´¯ ûÒx/ƒ²«Î³ µ'0§.ÎhÖËaY*~õŽ!Ý{¯V™¡ÝÝ#¾LÊ1pÔ elúLx¸ˆ%…½,xag½ðàEˆ^´¿>Ö 4̧ ¬Áça´g’'Pƒà9Ðl9$¾‡ùOf|&jEV)ÃÊ.uLÐO°`!ÅPQdág9úÀ%ÊMt›ýƒ=÷‹9ÇÑ ‘wÅí5ë,¼ä—¼!öùKK>ë½Û4÷Ña{ÇÂ# ½GDÇM=zØîÑN“ƒ¿ۇǼǵÛÅ3ä‹Ôï\OD(”æºä€Dù\;z$#Æ¢[ÒÈÅD‘Ob"xxMleìþB³M£·ø'Rµ¢†}§2FRÂð'O*=Ç9-óÑ¥üƒF÷ŒŸ¿h¸z"ú¢‡¹“9‡|ÝF¤àü“9 •ä¦k¸àï$õ uA¤ªÚ’c¿¸xŠ„rPêìáý ¾ß2 säãìZØ¡'ü®ÿÈ­æDóÊA—ÐRЂÏþJ_ÃfçùZð|qvÁbÑËY†²ôާôÒ)29ç‘›.)&ËÛ³:öi|DšXÃÙΘ&ˆ¨!xZïÙ4å& 4}áizŽD? „¯N3>¼¦\,ŒÙD§5å8T·^ôýÇn‚…Z!Ó/TÛ[(NN[<“ >™[&žå¡_¯Ñ 12JòÏÜ•.é¡\èOs4hð—|ÚÙÓøF†ÒÔºÀmÿÀ©ÙŸ~Ä-¼û·Ð7ºû3ß 'åÄ—àÒÇõ—oé5ñÛ‘£Q7 :±n´&ñ4ÿ»C2QÌd$©'WÂq¼Y[™Vº”ÍÑábNã-t32®XêXâè‚£õ/ÿre‹¨Únôâû¯ƒMЍ…‘ÊŒEop3¡?3ánô‘›ñ¬x}A¡$ìÍÍæsE‘Õ~\]ù½Í4±¢Û$Š“2)ñd óŽqª-ÜA' öÁ—cN+c±]½'‰Â½Š;ΈÏÝFZ™œÁ+ìYjÐÔŠ æOÇlô1N>9v%ä&Oý–G|©AI·Ïž<úŒÞaçƒÉ#ÒÔÒZ ‚~×,)Æ5=—.7ìßIARzZ}0rÆ )Êîrt-ߺ¹9ÜÜüóæfñóã">¡ÇØp¿#¼-AӟѲ H†¸—™ÒÁ¶àÐÑI=yñýKæâÈÉSac¯š`µ7í_<g$¡%ÊÂr|"¥r»¾¹‰ãø’KhÓ2V? Œ€ô°£µ&¢>;nXrýúÀÎü§ÀxY¼Ç~~çÅŒ¹•ðyñJ¤r8(é<%X‘R—vƒä¦R+ ëöÔrQëÎ5ªXê|öèÉùuÇÊ¡Kq8åÑÿÿ”/Œ1;ÇÃ&înÝüÏOæ?‡$Òùïñ"!‚O®ÁGù¸€²Y“ŠQ¿㊡f͈Ö¾O5ë7Ðò‘tÉYÕµÖϽN~FòÙÅ×ÓÑÕjËGÒ_ÿ1á…~ÛVNo&çoô÷õš®üïo'4I_áæŠ ¢çœöÀot»î¸4Ãcmˆ§c¸·¾pdoРð+w£+º3ïÙ’•çœt?Ñ•¬Ý¯[½š±ª˜45 ð¾iù+•;|RÔnçÒúy¸r\§?k²Ótôe»Ûìm·Æ§?¼b#ñƒPñ_ëUæô W>Ê|¥%î£aÔøÛÅá—)Dχø/¾þÍ ‰æšXÈ5Ø6\ƒˆá„Í\Œµ¨+MîÅœzËÇÒ÷³ÃVí²·<Å͘Aú`òþÈ1d½ \g~È_µoˆ´rn&Vêr9ú¡å}ë-Ã3ü8át¾ÝèEÏ y͇ǃUd{g=¼ºzõFè¼%´±¤z,§&_NWt¤òÞj5ë,rÅ ¯¥KvÖ`B6{^î¨D–‚Ù5–b¨Ä”1—,ñèý½XT^á½åÀ†@9zûžÖ” m£Üfo|’Þ¬­xÖRžµvT&Ň2odÎJhæ×¹Ÿ³ëuþ}=yìâ–ß’¾Å×ü=þ>>0;9!-‚Æ'¨£<Ê ¥íQþî‹/Xêð2³ÒJm„V\ÍðÈaz‘Vµp–ï›X8º*Y&\~÷~½›"uÆIç‹ÑO¿Ë¾¡ÞbÇ~Å?»ÝêjW¤Ø® kEó,éšß˜‘4Ó{°çŠ!…—qŽ)qKl@¹ï¦ôØ{E7{Ã#¤,y«±•w¼c&¹0ˆKúF$[¸XÄÏøÆZÜ{YÜé=‚ˆA˘¢ýýí‹ï^þuò|»és*íP-|íö¤ü ÿ±©ssMÄÁ·G M±¨æŸs%²I‰ël/NJî×õ™Á«Dþ {îNúep>”¨õ‡ ²Ç^µÿÄÉôÖÚh_ ?Ý øsÎë`ü4¾dïδ;Ðï?<³Ìa+&øÅºcM‡Yà 5 z9NË•_èœÌ6‰+²Êrñ–cuIé^áʦÇM‘®¦Â¹‡‘[š,\Œ²ÂožÒŠ©}·;NQK›XâŠöYÂB>â¸1œkM8‡,šö³ï±ou£Ź˜q¨m‹!ÓìÅ¥b{xˆEÁ)&ÖÅ3™œc—Ä(Œ|Ã,Ñðp˜¡8hO¶ºùÐ~06(þ×IìöÍt‡Æ<{4Ë,qu‡3;Îufb1“÷=Æœã.Øè*u»OKݪž˜•'DhMßðù¹ß¿W¦‚NôÊI¬Åè5cJ­÷$·¸í»‰”“UIÁš"³ý0ÝÏ«*JÅ@§À)ó ‚Y¶( õY’"ØwpŽüHºêµ‡6Dàu'ä|TW͇ºNÍ 8…ë$P¥¾ÙîöÛíZ÷í’Æèµ‹ŸVÝaò|…åB‘@çæu¢Óü4í‘Vr÷GjS¤Fç3ì˜{S›è†ËgP µ‰ÏNÑrD‹ø¡È u'ôøë$P•¾å\½ÙöømÎr§³ê·G ÃAðw”¯PùV±îð9›Ä¿ûþGvà쎟dÕÑ9#b?UŸÚyäRוzPpŠ—Hþ@wçq¢Oâ•Hafçéž· €ß¿zÎËñ“![ÉjW0£‡ä—‰êÚÈ;’oRB.Ýû‘r _Ó´ÚÒ¿“RÝ-Wr9øR//€ß°¬¤ÅWᇴ–£ÛA'r>Øk|¼‘Rôùbn°â®!:³öò›){QŸ»ÚlÒ»;ˆ¹–Ûë¤ðCxÕîïK¾úkÀ‹É8«åH{õâ?§ãƒº—Lb.Ý1žÆò¢j%àNW{ËbxÆn%f&K¼šÁÜû¦uPo£¬µ‰s^î4nJnj×íÊÑ !¼’êÀø`×Â6þú¸ÛMÕýýMÇÓ@ºÚ·83I®ü6NŽ$Pº~¯GÓ_Áò-³ü*(N~çq³jÃ[u)xn2™·Ì·s†Úüb+Ïf,hù‡Ð±mÔ‡Ž½U[Î6IÓÆVÙåæ"y¦Y"I bùûÎßwæ,±I{Çoýƒ'˜NìE–N"›^6e †™4²K‡;0 ¶`3ÖöªA^—¬½¼¿g¶ÝwÇ{¹ñðj‹IÄnÓ²ÒÏ{І©Xr¤E(E²ÉG¬Òw.gU a½²ãggZ à•@™¹„jWq}ÉÉ„£hÕ;Š4¶¡ÕóÊzü]Á4ó3Â{!ÈDª5˜ AŸ?= X®Y ]%š<í»Kgùq7åYŒèŽ8©Š³®/žp(Ój»½»¸ÛlÙ|°þÞ-è•ßý?R† Šæyasm-1.3.0/tools/re2c/doc/sample.bib0000644000175000017500000000462611542263760014122 00000000000000@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.} } yasm-1.3.0/tools/re2c/globals.h0000644000175000017500000000103111542263760013175 00000000000000#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 yasm-1.3.0/tools/re2c/CHANGELOG0000644000175000017500000000067511542263760012630 00000000000000re2c ---- 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 yasm-1.3.0/tools/Makefile.inc0000664000175000017500000000046512335722632012771 00000000000000EXTRA_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 yasm-1.3.0/tools/CMakeLists.txt0000664000175000017500000000011412335722632013310 00000000000000ADD_SUBDIRECTORY(genmacro) ADD_SUBDIRECTORY(genperf) ADD_SUBDIRECTORY(re2c) yasm-1.3.0/tools/python-yasm/0000775000175000017500000000000012372060146013120 500000000000000yasm-1.3.0/tools/python-yasm/yasm.pyx0000644000175000017500000001144011623775055014563 00000000000000# 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) yasm-1.3.0/tools/python-yasm/intnum.pxi0000644000175000017500000001555111542263760015106 00000000000000# 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)) yasm-1.3.0/tools/python-yasm/tests/0000775000175000017500000000000012372060146014262 500000000000000yasm-1.3.0/tools/python-yasm/tests/python_test.sh0000755000175000017500000000115011626275017017122 00000000000000#!/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 yasm-1.3.0/tools/python-yasm/tests/test_intnum.py0000644000175000017500000000366611626275017017144 00000000000000from 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) yasm-1.3.0/tools/python-yasm/tests/Makefile.inc0000644000175000017500000000066211626275017016422 00000000000000EXTRA_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 yasm-1.3.0/tools/python-yasm/tests/test_symrec.py0000644000175000017500000000564011626275017017126 00000000000000from 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) yasm-1.3.0/tools/python-yasm/tests/__init__.py0000644000175000017500000000371411626275017016324 00000000000000# 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:])) yasm-1.3.0/tools/python-yasm/tests/test_bytecode.py0000644000175000017500000000010711626275017017413 00000000000000from tests import TestCase, add from yasm import Bytecode, Expression yasm-1.3.0/tools/python-yasm/tests/test_expr.py0000644000175000017500000000101111626275017016566 00000000000000from 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) yasm-1.3.0/tools/python-yasm/value.pxi0000644000175000017500000000461711542263760014711 00000000000000# 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)) yasm-1.3.0/tools/python-yasm/errwarn.pxi0000644000175000017500000000603211542263760015246 00000000000000# 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 yasm-1.3.0/tools/python-yasm/expr.pxi0000644000175000017500000001302511542263760014544 00000000000000# 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)) yasm-1.3.0/tools/python-yasm/Makefile.inc0000644000175000017500000000536411626275017015264 00000000000000PYBINDING_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 yasm-1.3.0/tools/python-yasm/pyxelator/0000775000175000017500000000000012372060146015147 500000000000000yasm-1.3.0/tools/python-yasm/pyxelator/ir.py0000755000175000017500000010535311542263760016070 00000000000000#!/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 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 yasm-1.3.0/tools/python-yasm/pyxelator/wrap_yasm.py0000755000175000017500000000241611542263760017454 00000000000000#!/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() yasm-1.3.0/tools/python-yasm/pyxelator/cparse.py0000755000175000017500000005113011542263760016724 00000000000000#!/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) ) ) yasm-1.3.0/tools/python-yasm/pyxelator/parse_core.py0000755000175000017500000000517611542263760017602 00000000000000#!/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)] ################################################################### # ################################################################### # yasm-1.3.0/tools/python-yasm/pyxelator/node.py0000755000175000017500000002140611542263760016377 00000000000000#!/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 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() yasm-1.3.0/tools/python-yasm/setup.py0000644000175000017500000000666411542263760014571 00000000000000#! /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) yasm-1.3.0/tools/python-yasm/bytecode.pxi0000644000175000017500000000764311542263760015375 00000000000000# 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: yasm-1.3.0/tools/python-yasm/floatnum.pxi0000644000175000017500000000417611542263760015422 00000000000000# 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 yasm-1.3.0/tools/python-yasm/symrec.pxi0000644000175000017500000002317411542263760015076 00000000000000# 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) yasm-1.3.0/tools/genmacro/0000775000175000017500000000000012372060147012424 500000000000000yasm-1.3.0/tools/genmacro/Makefile.inc0000644000175000017500000000076411626275017014566 00000000000000# 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 yasm-1.3.0/tools/genmacro/CMakeLists.txt0000644000175000017500000000005511542263760015106 00000000000000add_executable(genmacro genmacro.c ) yasm-1.3.0/tools/genmacro/genmacro.c0000644000175000017500000001000611626275017014303 00000000000000/* * * 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; } yasm-1.3.0/libyasm-stdint.h.cmake0000664000175000017500000000144712372060105013604 00000000000000#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 yasm-1.3.0/yasm_parsers.70000664000175000017500000000442612334021305012206 00000000000000'\" 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 yasm-1.3.0/config.h.cmake0000664000175000017500000000232612372044371012112 00000000000000/* 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@" yasm-1.3.0/CMakeLists.txt0000664000175000017500000000224112372060114012142 00000000000000PROJECT(yasm) CMAKE_MINIMUM_REQUIRED(VERSION 2.4) 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 ) yasm-1.3.0/Makefile.in0000664000175000017500000057327512372060126011476 00000000000000# 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: yasm-1.3.0/x86insns.c0000664000175000017500000044453112371621515011271 00000000000000/* 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 } }; yasm-1.3.0/splint.sh0000755000175000017500000000424211542263760011265 00000000000000#!/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 yasm-1.3.0/yasm_arch.70000664000175000017500000004134412334021305011444 00000000000000'\" 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 yasm-1.3.0/GNU_LGPL-2.00000644000175000017500000006130711542263760011111 00000000000000 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! yasm-1.3.0/config.h.in0000664000175000017500000001026712371736157011454 00000000000000/* 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 yasm-1.3.0/yasm.10000664000175000017500000003012612334021305010435 00000000000000'\" 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 yasm-1.3.0/frontends/0000775000175000017500000000000012372060147011473 500000000000000yasm-1.3.0/frontends/yasm/0000775000175000017500000000000012372060147012444 500000000000000yasm-1.3.0/frontends/yasm/genstring.py0000775000175000017500000000414012371744440014744 00000000000000#!/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]) yasm-1.3.0/frontends/yasm/yasm.c0000664000175000017500000013174512372044371013515 00000000000000/* * 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); } yasm-1.3.0/frontends/yasm/yasm-options.c0000644000175000017500000001747611626275017015214 00000000000000/* * 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)); } yasm-1.3.0/frontends/yasm/Makefile.inc0000644000175000017500000000111011626275017014570 00000000000000bin_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 yasm-1.3.0/frontends/yasm/CMakeLists.txt0000664000175000017500000000165712372044371015136 00000000000000INCLUDE_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) yasm-1.3.0/frontends/yasm/yasm-plugin.c0000644000175000017500000000656411626275017015013 00000000000000/* * 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; } yasm-1.3.0/frontends/yasm/yasm-options.h0000644000175000017500000000557311626275017015214 00000000000000/* * 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 yasm-1.3.0/frontends/yasm/yasm.xml0000644000175000017500000004514311626275017014071 00000000000000 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).
yasm-1.3.0/frontends/yasm/yasm-plugin.h0000644000175000017500000000302511626275017015005 00000000000000/* * 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 yasm-1.3.0/frontends/Makefile.inc0000644000175000017500000000035711626275017013633 00000000000000EXTRA_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 yasm-1.3.0/frontends/CMakeLists.txt0000664000175000017500000000010712371736130014152 00000000000000ADD_SUBDIRECTORY(yasm) ADD_SUBDIRECTORY(tasm) ADD_SUBDIRECTORY(vsyasm) yasm-1.3.0/frontends/vsyasm/0000775000175000017500000000000012372060147013015 500000000000000yasm-1.3.0/frontends/vsyasm/vsyasm.c0000664000175000017500000013263612372044371014437 00000000000000/* * 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); } yasm-1.3.0/frontends/vsyasm/Makefile.inc0000644000175000017500000000037211626275017015152 00000000000000bin_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) yasm-1.3.0/frontends/vsyasm/CMakeLists.txt0000664000175000017500000000214312372044371015476 00000000000000INCLUDE_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) yasm-1.3.0/frontends/tasm/0000775000175000017500000000000012372060147012437 500000000000000yasm-1.3.0/frontends/tasm/Makefile.inc0000644000175000017500000000030111626275017014564 00000000000000bin_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) yasm-1.3.0/frontends/tasm/CMakeLists.txt0000664000175000017500000000202412372044371015116 00000000000000INCLUDE_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) yasm-1.3.0/frontends/tasm/tasm-options.c0000664000175000017500000001024012371736130015156 00000000000000/* * 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)); } yasm-1.3.0/frontends/tasm/tasm-options.h0000644000175000017500000000522211626275017015171 00000000000000/* * 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 yasm-1.3.0/frontends/tasm/tasm.c0000664000175000017500000007713112372044371013501 00000000000000/* * 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); } yasm-1.3.0/modules/0000775000175000017500000000000012372060147011141 500000000000000yasm-1.3.0/modules/arch/0000775000175000017500000000000012372060147012056 500000000000000yasm-1.3.0/modules/arch/x86/0000775000175000017500000000000012372060147012503 500000000000000yasm-1.3.0/modules/arch/x86/gen_x86_insn.py0000775000175000017500000110631612371621045015314 00000000000000#! /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")) yasm-1.3.0/modules/arch/x86/tests/0000775000175000017500000000000012372060146013644 500000000000000yasm-1.3.0/modules/arch/x86/tests/iret.asm0000644000175000017500000000012711542263760015234 00000000000000[bits 16] iret iretw iretd [bits 32] iret iretw iretd [bits 64] iret iretw iretd iretq yasm-1.3.0/modules/arch/x86/tests/sse3.asm0000644000175000017500000000073611542263760015154 00000000000000[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 yasm-1.3.0/modules/arch/x86/tests/xchg64.asm0000644000175000017500000000056411542263760015401 00000000000000[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 yasm-1.3.0/modules/arch/x86/tests/ea-nonzero.asm0000644000175000017500000000016211542263760016345 00000000000000; Ticket #58 ; Also tests that this isn't seen as a circular reference. [bits 64] a: lea rbp,[rsi+rbp*1+(b-a)] b: yasm-1.3.0/modules/arch/x86/tests/vsib.asm0000644000175000017500000001271611623775055015250 00000000000000[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 yasm-1.3.0/modules/arch/x86/tests/shift.hex0000644000175000017500000000004011542263760015404 00000000000000d0 e0 d0 e0 d0 e0 d0 e0 yasm-1.3.0/modules/arch/x86/tests/lsahf.asm0000644000175000017500000000007411542263760015367 00000000000000[bits 16] lahf sahf [bits 32] lahf sahf [bits 64] lahf sahf yasm-1.3.0/modules/arch/x86/tests/svm.hex0000644000175000017500000000064011542263760015102 000000000000000f 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 yasm-1.3.0/modules/arch/x86/tests/cmpxchg.hex0000644000175000017500000000021011542263760015717 000000000000000f 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 yasm-1.3.0/modules/arch/x86/tests/larlsl.asm0000644000175000017500000000140411623542630015555 00000000000000[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] yasm-1.3.0/modules/arch/x86/tests/pushf-err.errwarn0000644000175000017500000000073511542263760017111 00000000000000-: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 yasm-1.3.0/modules/arch/x86/tests/str.asm0000644000175000017500000000004711542263760015102 00000000000000[bits 32] str [esp] [bits 16] str [bp] yasm-1.3.0/modules/arch/x86/tests/simd-2.asm0000644000175000017500000000645211542263760015373 00000000000000[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 yasm-1.3.0/modules/arch/x86/tests/far64.hex0000644000175000017500000000026011542263760015215 00000000000000ff 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 yasm-1.3.0/modules/arch/x86/tests/ebpindex.asm0000644000175000017500000000015211542263760016065 00000000000000[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] yasm-1.3.0/modules/arch/x86/tests/gas64/0000775000175000017500000000000012372060146014570 500000000000000yasm-1.3.0/modules/arch/x86/tests/gas64/gas-prefix.hex0000644000175000017500000000420011542263760017262 000000000000007f 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 yasm-1.3.0/modules/arch/x86/tests/gas64/gas-cbw.asm0000644000175000017500000000007011542263760016535 00000000000000cbw cdqe cwde cwd cdq cqo cbtw cltq cwtl cwtd cltd cqto yasm-1.3.0/modules/arch/x86/tests/gas64/gas-loop64.hex0000644000175000017500000000410011542263760017107 000000000000007f 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 yasm-1.3.0/modules/arch/x86/tests/gas64/gas-retenter.asm0000644000175000017500000000023311542263760017613 00000000000000ret 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 yasm-1.3.0/modules/arch/x86/tests/gas64/x86_gas64_test.sh0000755000175000017500000000020611626275017017541 00000000000000#! /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 $? yasm-1.3.0/modules/arch/x86/tests/gas64/Makefile.inc0000644000175000017500000000356111626275017016731 00000000000000TESTS += 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 yasm-1.3.0/modules/arch/x86/tests/gas64/gas-inout.asm0000644000175000017500000000020611542263760017121 00000000000000inb $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 yasm-1.3.0/modules/arch/x86/tests/gas64/gas-retenter.hex0000644000175000017500000000420011542263760017615 000000000000007f 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 yasm-1.3.0/modules/arch/x86/tests/gas64/gas-moreinsn.asm0000644000175000017500000000141411542263760017617 00000000000000movsl 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 yasm-1.3.0/modules/arch/x86/tests/gas64/gas-prefix.errwarn0000644000175000017500000000031711542263760020163 00000000000000-: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 yasm-1.3.0/modules/arch/x86/tests/gas64/gas64-jmpcall.asm0000644000175000017500000000004711542263760017562 00000000000000call foo callq foo jmp foo #jmpq foo yasm-1.3.0/modules/arch/x86/tests/gas64/gas64-jmpcall.hex0000644000175000017500000000530011542263760017563 000000000000007f 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 yasm-1.3.0/modules/arch/x86/tests/gas64/gas-movsxs.asm0000644000175000017500000000073611542263760017332 00000000000000movsbl %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 yasm-1.3.0/modules/arch/x86/tests/gas64/gas-fp.asm0000644000175000017500000000041011542263760016365 00000000000000fld %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 yasm-1.3.0/modules/arch/x86/tests/gas64/gas-inout.hex0000644000175000017500000000410011542263760017122 000000000000007f 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 yasm-1.3.0/modules/arch/x86/tests/gas64/gas-movdq64.hex0000644000175000017500000000500011542263760017264 000000000000007f 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 yasm-1.3.0/modules/arch/x86/tests/gas64/riprel.asm0000644000175000017500000000002311542263760016505 00000000000000mov %rax,foo(%rip) yasm-1.3.0/modules/arch/x86/tests/gas64/gas-shift.hex0000644000175000017500000000440011542263760017104 000000000000007f 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 yasm-1.3.0/modules/arch/x86/tests/gas64/gas-muldiv.hex0000644000175000017500000000470011542263760017272 000000000000007f 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 yasm-1.3.0/modules/arch/x86/tests/gas64/gas-shift.asm0000644000175000017500000000057311542263760017107 00000000000000shlb $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 yasm-1.3.0/modules/arch/x86/tests/gas64/riprel.hex0000644000175000017500000000500011542263760016511 000000000000007f 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 yasm-1.3.0/modules/arch/x86/tests/gas64/gas-muldiv.asm0000644000175000017500000000101011542263760017255 00000000000000mulb %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 yasm-1.3.0/modules/arch/x86/tests/gas64/gas-moreinsn.hex0000644000175000017500000000550011623775055017630 000000000000007f 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 yasm-1.3.0/modules/arch/x86/tests/gas64/gas-movdq64.asm0000644000175000017500000000066411542263760017273 00000000000000movd %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) yasm-1.3.0/modules/arch/x86/tests/gas64/gas-fp.hex0000644000175000017500000000520011542263760016373 000000000000007f 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 yasm-1.3.0/modules/arch/x86/tests/gas64/gas-movabs.asm0000644000175000017500000000007711542263760017260 00000000000000.comm _CONE, 4, 16 movabsl %eax,(_CONE) movabsl (_CONE), %eax yasm-1.3.0/modules/arch/x86/tests/gas64/gas-movsxs.hex0000644000175000017500000000500011542263760017323 000000000000007f 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 yasm-1.3.0/modules/arch/x86/tests/gas64/align64.asm0000644000175000017500000000153711542263760016467 00000000000000.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 yasm-1.3.0/modules/arch/x86/tests/gas64/gas-cbw.hex0000644000175000017500000000410011542263760016537 000000000000007f 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 yasm-1.3.0/modules/arch/x86/tests/gas64/gas-prefix.asm0000644000175000017500000000014111542263760017256 00000000000000rep movsb rexx rexx rexy rex jmp foo rex movb $0, %ah rex movb $0, %sil rex64 movl $0, %eax foo: yasm-1.3.0/modules/arch/x86/tests/gas64/align64.hex0000644000175000017500000000520011542263760016462 000000000000007f 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 yasm-1.3.0/modules/arch/x86/tests/gas64/gas-loop64.asm0000644000175000017500000000006711542263760017113 00000000000000loop label #loopw label loopl label loopq label label: yasm-1.3.0/modules/arch/x86/tests/gas64/gas-movabs.hex0000644000175000017500000000520011542263760017255 000000000000007f 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 yasm-1.3.0/modules/arch/x86/tests/nomem64-err.asm0000644000175000017500000000015611542263760016346 00000000000000[bits 64] push es pop fs pushaw popa lds eax, [5] aas das aad into salc [bits 32] xmm9: rax: rdx: cdqe swapgs yasm-1.3.0/modules/arch/x86/tests/genopcode.asm0000644000175000017500000000436611542263760016245 00000000000000[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 yasm-1.3.0/modules/arch/x86/tests/addrop.asm0000644000175000017500000000106511542263760015544 00000000000000[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 yasm-1.3.0/modules/arch/x86/tests/vsib-err.asm0000644000175000017500000000050411623775055016026 00000000000000; 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 yasm-1.3.0/modules/arch/x86/tests/simd64-2.hex0000644000175000017500000000023411542263760015541 00000000000000f2 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 yasm-1.3.0/modules/arch/x86/tests/sse4-err.errwarn0000644000175000017500000000017211542263760016635 00000000000000-:2: error: cannot use A/B/C/DH with instruction needing REX -:3: error: cannot use A/B/C/DH with instruction needing REX yasm-1.3.0/modules/arch/x86/tests/o64loop.asm0000644000175000017500000000003611542263760015572 00000000000000[bits 64] o64 loop next next: yasm-1.3.0/modules/arch/x86/tests/eptvpid.hex0000644000175000017500000000013011542263760015742 0000000000000066 0f 38 80 00 66 0f 38 81 00 66 48 0f 38 80 00 66 48 0f 38 81 00 yasm-1.3.0/modules/arch/x86/tests/fsgsbase.asm0000644000175000017500000000016311542263760016066 00000000000000[bits 64] rdfsbase ebx rdfsbase rbx rdgsbase ecx rdgsbase rcx wrfsbase ebx wrfsbase rbx wrgsbase ecx wrgsbase rcx yasm-1.3.0/modules/arch/x86/tests/smx.hex0000644000175000017500000000001011542263760015073 000000000000000f 37 yasm-1.3.0/modules/arch/x86/tests/ssse3.hex0000644000175000017500000000761011542263760015341 0000000000000067 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 yasm-1.3.0/modules/arch/x86/tests/mixcase.hex0000644000175000017500000000001411542263760015721 00000000000000b8 05 00 yasm-1.3.0/modules/arch/x86/tests/enter.errwarn0000644000175000017500000000013011542263760016300 00000000000000-:8: warning: address size override ignored -:9: warning: address size override ignored yasm-1.3.0/modules/arch/x86/tests/bswap64.hex0000644000175000017500000000003011542263760015554 0000000000000049 0f c8 48 0f c8 yasm-1.3.0/modules/arch/x86/tests/jmp64-4.hex0000644000175000017500000000007011542263760015373 00000000000000c7 04 25 0e 00 00 00 0e 00 00 00 72 01 00 yasm-1.3.0/modules/arch/x86/tests/lzcnt.asm0000644000175000017500000000035711623775055015435 00000000000000[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 yasm-1.3.0/modules/arch/x86/tests/sse4.hex0000644000175000017500000001241411542263760015155 0000000000000066 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 yasm-1.3.0/modules/arch/x86/tests/overflow.asm0000644000175000017500000000023011542263760016127 00000000000000[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 yasm-1.3.0/modules/arch/x86/tests/xop-all.asm0000644000175000017500000002614611542263760015656 00000000000000; 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 yasm-1.3.0/modules/arch/x86/tests/arithsmall.hex0000644000175000017500000000031411542263760016433 0000000000000025 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 yasm-1.3.0/modules/arch/x86/tests/clmul.asm0000664000175000017500000000205612371621045015405 00000000000000[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] yasm-1.3.0/modules/arch/x86/tests/strict.hex0000644000175000017500000000417011542263760015607 0000000000000083 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 yasm-1.3.0/modules/arch/x86/tests/overflow.hex0000644000175000017500000000022411542263760016136 00000000000000b8 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 yasm-1.3.0/modules/arch/x86/tests/segoff-err.errwarn0000644000175000017500000000030211542263760017223 00000000000000-: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 yasm-1.3.0/modules/arch/x86/tests/xop-all.hex0000664000175000017500000001316412333771162015657 000000000000008f 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 yasm-1.3.0/modules/arch/x86/tests/Makefile.inc0000644000175000017500000003075411626275017016011 00000000000000TESTS += 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 yasm-1.3.0/modules/arch/x86/tests/ret.hex0000644000175000017500000000037411542263760015073 00000000000000c3 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 yasm-1.3.0/modules/arch/x86/tests/jmp64-2.hex0000644000175000017500000000006411542263760015374 00000000000000c7 04 25 0d 00 00 00 0d 00 00 00 72 00 yasm-1.3.0/modules/arch/x86/tests/ssewidth.asm0000644000175000017500000002122111542263760016121 00000000000000[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] yasm-1.3.0/modules/arch/x86/tests/f16c.asm0000644000175000017500000000032311542263760015026 00000000000000[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 yasm-1.3.0/modules/arch/x86/tests/vsib.hex0000644000175000017500000000513011623775055015244 0000000000000067 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 yasm-1.3.0/modules/arch/x86/tests/negequ.asm0000644000175000017500000000015411542263760015555 00000000000000[bits 32] off equ -4 pos equ 4 mov [ebp+off], eax mov [ebp+pos], eax mov [ebp-off], eax mov [ebp-pos], eax yasm-1.3.0/modules/arch/x86/tests/addbyte.asm0000644000175000017500000000115011542263760015702 00000000000000; 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 yasm-1.3.0/modules/arch/x86/tests/sse4.asm0000644000175000017500000000670111542263760015153 00000000000000[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 yasm-1.3.0/modules/arch/x86/tests/opersize.hex0000644000175000017500000000017011542263760016133 0000000000000089 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 yasm-1.3.0/modules/arch/x86/tests/riprel2.hex0000644000175000017500000000540011542263760015653 0000000000000048 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 yasm-1.3.0/modules/arch/x86/tests/strict.asm0000644000175000017500000001016511542263760015604 00000000000000bits 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 yasm-1.3.0/modules/arch/x86/tests/xop-cc.hex0000644000175000017500000000066011542263760015470 000000000000008f 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 yasm-1.3.0/modules/arch/x86/tests/negequ.hex0000644000175000017500000000006011542263760015555 0000000000000089 45 fc 89 45 04 89 45 04 89 45 fc yasm-1.3.0/modules/arch/x86/tests/avx16.asm0000644000175000017500000000031711542263760015237 00000000000000[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 yasm-1.3.0/modules/arch/x86/tests/pshift.hex0000644000175000017500000000026411542263760015574 000000000000000f 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 yasm-1.3.0/modules/arch/x86/tests/jmp64-3.asm0000644000175000017500000000010411542263760015364 00000000000000[bits 64] l1: mov dword [l2], l2 jc short l3 db 0x0 l3: l2 equ $-l1 yasm-1.3.0/modules/arch/x86/tests/aes.asm0000644000175000017500000000342011542263760015040 00000000000000[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] yasm-1.3.0/modules/arch/x86/tests/imm64.hex0000644000175000017500000000127411542263760015235 0000000000000048 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 yasm-1.3.0/modules/arch/x86/tests/addbyte.hex0000644000175000017500000000060411542263760015711 0000000000000083 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 yasm-1.3.0/modules/arch/x86/tests/jmp64-1.asm0000644000175000017500000000006711542263760015372 00000000000000[bits 64] l1: mov dword [l2], l2 jc l3 l3: l2 equ $-l1 yasm-1.3.0/modules/arch/x86/tests/enter.asm0000644000175000017500000000015111542263760015403 00000000000000[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 yasm-1.3.0/modules/arch/x86/tests/pushnosize.asm0000644000175000017500000000305111542263760016477 00000000000000[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 yasm-1.3.0/modules/arch/x86/tests/push64.errwarn0000644000175000017500000000007011542263760016317 00000000000000-:6: warning: value does not fit in signed 32 bit field yasm-1.3.0/modules/arch/x86/tests/movbe.hex0000644000175000017500000000130011542263760015377 0000000000000066 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 yasm-1.3.0/modules/arch/x86/tests/bmi1.hex0000644000175000017500000000140411623775055015131 00000000000000c4 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 yasm-1.3.0/modules/arch/x86/tests/mem64.errwarn0000664000175000017500000000006112371621045016113 00000000000000-:7: warning: value does not fit in 32 bit field yasm-1.3.0/modules/arch/x86/tests/fwdequ64.asm0000644000175000017500000000005611542263760015737 00000000000000[bits 64] l1: inc dword [l2] l2 equ 4-(l1-$$) yasm-1.3.0/modules/arch/x86/tests/loopadsz.hex0000644000175000017500000000006011542263760016124 0000000000000067 e2 fd 67 e2 fd 67 e2 fd 67 e2 fd yasm-1.3.0/modules/arch/x86/tests/fwdequ64.hex0000644000175000017500000000003411542263760015737 00000000000000ff 04 25 04 00 00 00 yasm-1.3.0/modules/arch/x86/tests/push64.hex0000644000175000017500000000011411542263760015422 000000000000006a 32 6a ff 68 32 00 00 00 68 ff ff ff ff 68 00 10 a5 d4 yasm-1.3.0/modules/arch/x86/tests/avxcc.hex0000644000175000017500000003564011542263760015411 0000000000000066 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 yasm-1.3.0/modules/arch/x86/tests/avxcc.asm0000644000175000017500000007222411542263760015404 00000000000000; 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 yasm-1.3.0/modules/arch/x86/tests/mem64-err.errwarn0000644000175000017500000000037511542263760016714 00000000000000-: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 yasm-1.3.0/modules/arch/x86/tests/sse-prefix.asm0000644000175000017500000000054011542263760016355 00000000000000[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 yasm-1.3.0/modules/arch/x86/tests/segoff.hex0000644000175000017500000000007411542263760015547 00000000000000ff 2e 02 00 a1 02 00 66 ff 36 02 00 b8 02 00 yasm-1.3.0/modules/arch/x86/tests/riprel2.asm0000644000175000017500000000502411542263760015651 00000000000000 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 $ yasm-1.3.0/modules/arch/x86/tests/overflow.errwarn0000644000175000017500000000044711542263760017041 00000000000000-: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 yasm-1.3.0/modules/arch/x86/tests/aes.hex0000664000175000017500000000262012336327772015055 0000000000000066 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 yasm-1.3.0/modules/arch/x86/tests/vmx-err.asm0000644000175000017500000000014211542263760015666 00000000000000[bits 32] ;vmread [ebx], rcx ;vmwrite rbp, [ebp] [bits 64] vmread [rax], eax vmwrite eax, [rcx] yasm-1.3.0/modules/arch/x86/tests/vmx.asm0000644000175000017500000000044211542263760015103 00000000000000[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] yasm-1.3.0/modules/arch/x86/tests/o64loop.hex0000644000175000017500000000001011542263760015566 00000000000000e2 00 yasm-1.3.0/modules/arch/x86/tests/ssewidth.hex0000644000175000017500000001376011542263760016136 0000000000000066 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 yasm-1.3.0/modules/arch/x86/tests/amd200707.asm0000644000175000017500000000100711542263760015510 00000000000000bits 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] yasm-1.3.0/modules/arch/x86/tests/twobytemem.asm0000644000175000017500000000034711542263760016471 00000000000000lgdt [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] yasm-1.3.0/modules/arch/x86/tests/loopadsz.asm0000644000175000017500000000021211542263760016117 00000000000000[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 yasm-1.3.0/modules/arch/x86/tests/jmp64-1.hex0000644000175000017500000000006411542263760015373 00000000000000c7 04 25 0d 00 00 00 0d 00 00 00 72 00 yasm-1.3.0/modules/arch/x86/tests/mixcase.asm0000644000175000017500000000002411542263760015716 00000000000000CPU SSSE3 MOV AX,5 yasm-1.3.0/modules/arch/x86/tests/effaddr.asm0000644000175000017500000000054711542263760015672 00000000000000[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] yasm-1.3.0/modules/arch/x86/tests/riprel2.errwarn0000644000175000017500000000303011542263760016544 00000000000000-: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 yasm-1.3.0/modules/arch/x86/tests/vsib2-err.errwarn0000644000175000017500000000042711623775055017014 00000000000000-: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 yasm-1.3.0/modules/arch/x86/tests/shift64.asm0000644000175000017500000000007011623775055015562 00000000000000[bits 64] shl rax, 5 shl rax, 32 shr rax, 5 shr rax, 32 yasm-1.3.0/modules/arch/x86/tests/mem64-err.asm0000644000175000017500000000015411542263760016007 00000000000000[bits 64] mov ax, [word 0] ;a16 mov ax, [0] mov ax, [ax] mov eax, [rip+rcx] mov rbx, [rcx+ebx] mov ah, [r8] yasm-1.3.0/modules/arch/x86/tests/farithr.asm0000644000175000017500000000022111542263760015723 00000000000000 fsub st1 fsubp st1 fsubr st1 fsubrp st1 fdiv st1 fdivp st1 fdivr st1 fdivrp st1 yasm-1.3.0/modules/arch/x86/tests/larlsl.hex0000644000175000017500000000131011623542630015555 000000000000000f 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 yasm-1.3.0/modules/arch/x86/tests/ssse3.asm0000644000175000017500000000377511542263760015345 00000000000000%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 yasm-1.3.0/modules/arch/x86/tests/pushnosize.errwarn0000644000175000017500000000052011542263760017375 00000000000000-: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 yasm-1.3.0/modules/arch/x86/tests/arithsmall.asm0000644000175000017500000000041211542263760016426 00000000000000[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 yasm-1.3.0/modules/arch/x86/tests/ripseg.asm0000644000175000017500000000116211542263760015562 00000000000000bits 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] yasm-1.3.0/modules/arch/x86/tests/x86label.asm0000644000175000017500000000003111542263760015710 00000000000000and_label: jmp and_label yasm-1.3.0/modules/arch/x86/tests/nomem64.hex0000644000175000017500000000117411542263760015565 00000000000000b4 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 yasm-1.3.0/modules/arch/x86/tests/pushf-err.asm0000644000175000017500000000026611542263760016210 00000000000000[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 yasm-1.3.0/modules/arch/x86/tests/xop-cc.asm0000644000175000017500000000156011542263760015464 00000000000000[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 yasm-1.3.0/modules/arch/x86/tests/xsave.hex0000644000175000017500000000017011542263760015421 000000000000000f 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 yasm-1.3.0/modules/arch/x86/tests/mem64rip.hex0000644000175000017500000000021411542263760015735 000000000000008b 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 yasm-1.3.0/modules/arch/x86/tests/strict.errwarn0000644000175000017500000000215011542263760016477 00000000000000-: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 yasm-1.3.0/modules/arch/x86/tests/sse3.hex0000644000175000017500000000073011542263760015152 0000000000000066 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 yasm-1.3.0/modules/arch/x86/tests/avx2.hex0000644000175000017500000002174411623775055015172 00000000000000c4 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 yasm-1.3.0/modules/arch/x86/tests/strict-err.errwarn0000644000175000017500000000023411542263760017266 00000000000000-: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 yasm-1.3.0/modules/arch/x86/tests/fcmov.asm0000644000175000017500000000020611542263760015401 00000000000000fcmovb st0, st1 fcmovbe st0, st1 fcmove st0, st1 fcmovnb st0, st1 fcmovnbe st0, st1 fcmovne st0, st1 fcmovnu st0, st1 fcmovu st0, st1 yasm-1.3.0/modules/arch/x86/tests/effaddr.hex0000644000175000017500000000037411542263760015674 0000000000000066 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 yasm-1.3.0/modules/arch/x86/tests/segmov.hex0000644000175000017500000000016411542263760015576 000000000000008c 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 yasm-1.3.0/modules/arch/x86/tests/ea-over.hex0000644000175000017500000000003011542263760015624 000000000000008d 80 1c cb 18 56 yasm-1.3.0/modules/arch/x86/tests/clmul.hex0000664000175000017500000000151012371621045015403 0000000000000066 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 yasm-1.3.0/modules/arch/x86/tests/nomem64.errwarn0000664000175000017500000000006212371621045016451 00000000000000-:19: warning: value does not fit in 32 bit field yasm-1.3.0/modules/arch/x86/tests/far64.asm0000644000175000017500000000015511542263760015214 00000000000000[bits 64] call far dword [0] call far qword [0] call far [0] jmp far dword [0] jmp far qword [0] jmp far [0] yasm-1.3.0/modules/arch/x86/tests/ssse3.c0000644000175000017500000001257211542263760015002 00000000000000#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 ); } }yasm-1.3.0/modules/arch/x86/tests/lzcnt.hex0000644000175000017500000000025411623775055015435 0000000000000066 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 yasm-1.3.0/modules/arch/x86/tests/ea-warn.asm0000644000175000017500000000066211542263760015627 00000000000000[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 yasm-1.3.0/modules/arch/x86/tests/shift64.hex0000644000175000017500000000010011623775055015560 0000000000000048 c1 e0 05 48 c1 e0 20 48 c1 e8 05 48 c1 e8 20 yasm-1.3.0/modules/arch/x86/tests/rdrnd.asm0000644000175000017500000000005211542263760015377 00000000000000[bits 64] rdrand cx rdrand ecx rdrand rcx yasm-1.3.0/modules/arch/x86/tests/avx.asm0000644000175000017500000016216611542263760015103 00000000000000; 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 yasm-1.3.0/modules/arch/x86/tests/cyrix.asm0000644000175000017500000000075011542263760015431 00000000000000[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] yasm-1.3.0/modules/arch/x86/tests/ebpindex.hex0000644000175000017500000000010011542263760016062 0000000000000033 44 8d 00 33 5c 8d 04 33 74 8d 08 33 7c 8d 0c yasm-1.3.0/modules/arch/x86/tests/nomem64-err.errwarn0000644000175000017500000000122211542263760017241 00000000000000-: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 yasm-1.3.0/modules/arch/x86/tests/jmp64-2.asm0000644000175000017500000000007511542263760015372 00000000000000[bits 64] l1: mov dword [l2], l2 jc short l3 l3: l2 equ $-l1 yasm-1.3.0/modules/arch/x86/tests/addrop-err.asm0000644000175000017500000000007211542263760016327 00000000000000[BITS 32] a16 idiv byte [dword 0] ; 67 F6 3D 00 00 00 00 yasm-1.3.0/modules/arch/x86/tests/o64.asm0000644000175000017500000000006611542263760014703 00000000000000[bits 64] fxsave [0] o64 fxsave [0] sysret o64 sysret yasm-1.3.0/modules/arch/x86/tests/ea-over.errwarn0000644000175000017500000000006111542263760016524 00000000000000-:4: warning: value does not fit in 32 bit field yasm-1.3.0/modules/arch/x86/tests/strict-err.asm0000644000175000017500000000041211542263760016364 00000000000000bits 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 yasm-1.3.0/modules/arch/x86/tests/xchg64.hex0000644000175000017500000000034011542263760015375 0000000000000066 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 yasm-1.3.0/modules/arch/x86/tests/amd-fma4.hex0000644000175000017500000000416011542263760015664 00000000000000c4 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 yasm-1.3.0/modules/arch/x86/tests/vmx.hex0000644000175000017500000000051411542263760015107 000000000000000f 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 yasm-1.3.0/modules/arch/x86/tests/simd-1.hex0000644000175000017500000000041411542263760015366 000000000000000f 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 yasm-1.3.0/modules/arch/x86/tests/riprel1.hex0000644000175000017500000000247011542263760015656 0000000000000048 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 yasm-1.3.0/modules/arch/x86/tests/segmov.asm0000644000175000017500000000017111542263760015570 00000000000000mov [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] yasm-1.3.0/modules/arch/x86/tests/jmp64-3.hex0000644000175000017500000000007011542263760015372 00000000000000c7 04 25 0e 00 00 00 0e 00 00 00 72 01 00 yasm-1.3.0/modules/arch/x86/tests/sse4-err.asm0000644000175000017500000000007311542263760015735 00000000000000[bits 64] crc32 r8d, bh ; error crc32 rax, bh ; error yasm-1.3.0/modules/arch/x86/tests/xmm64.hex0000644000175000017500000000003411542263760015245 000000000000000f 57 d2 45 0f 57 d2 yasm-1.3.0/modules/arch/x86/tests/push64.asm0000644000175000017500000000015111542263760015417 00000000000000[bits 64] push dword 50 push dword -1 push strict dword 50 push strict dword -1 push dword 1000000000000 yasm-1.3.0/modules/arch/x86/tests/sse-prefix.hex0000644000175000017500000000050411542263760016361 0000000000000066 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 yasm-1.3.0/modules/arch/x86/tests/mem64hi32.asm0000644000175000017500000000006211542263760015705 00000000000000[bits 64] adc byte [eax], 12h adc byte [r8d], 12h yasm-1.3.0/modules/arch/x86/tests/jmp64-5.hex0000644000175000017500000100011011542263760015370 00000000000000c7 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 yasm-1.3.0/modules/arch/x86/tests/ea-over.asm0000644000175000017500000000010611542263760015624 00000000000000[bits 32] %define P 0xB7E15163 %define Q 0x9E3779B9 lea eax,[eax+P+Q] yasm-1.3.0/modules/arch/x86/tests/fma.hex0000644000175000017500000001320011542263760015034 00000000000000c4 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 yasm-1.3.0/modules/arch/x86/tests/pushf.asm0000644000175000017500000000027411542263760015421 00000000000000[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 yasm-1.3.0/modules/arch/x86/tests/movdq64.hex0000644000175000017500000000102011542263760015566 000000000000000f 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 yasm-1.3.0/modules/arch/x86/tests/enter.hex0000644000175000017500000000015011542263760015406 00000000000000c8 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 yasm-1.3.0/modules/arch/x86/tests/str.hex0000644000175000017500000000004011542263760015077 000000000000000f 00 0c 24 0f 00 4e 00 yasm-1.3.0/modules/arch/x86/tests/avx2.asm0000644000175000017500000005501511623775055015164 00000000000000; 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 yasm-1.3.0/modules/arch/x86/tests/opsize-err.errwarn0000644000175000017500000000004711542263760017271 00000000000000-:3: error: invalid size for operand 2 yasm-1.3.0/modules/arch/x86/tests/lfs64.asm0000644000175000017500000000021611623775055015233 00000000000000[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] yasm-1.3.0/modules/arch/x86/tests/bittest.hex0000644000175000017500000000002411542263760015747 0000000000000066 0f ba f0 04 yasm-1.3.0/modules/arch/x86/tests/stos.asm0000644000175000017500000000013211542263760015255 00000000000000[bits 16] stosb stosw stosd [bits 32] stosb stosw stosd [bits 64] stosb stosw stosd stosq yasm-1.3.0/modules/arch/x86/tests/padlock.asm0000644000175000017500000000024111542263760015703 00000000000000;xstore-rng xstorerng xstore ;xcrypt-ecb xcryptecb ;xcrypt-cbc xcryptcbc ;xcrypt-ctr xcryptctr ;xcrypt-cfb xcryptcfb ;xcrypt-ofb xcryptofb montmul xsha1 xsha256 yasm-1.3.0/modules/arch/x86/tests/addrop.hex0000644000175000017500000000054011542263760015545 00000000000000f6 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 yasm-1.3.0/modules/arch/x86/tests/stringseg.hex0000644000175000017500000000005411542263760016301 0000000000000026 aa 26 ab 66 64 ab 65 a4 26 a5 yasm-1.3.0/modules/arch/x86/tests/segoff.asm0000644000175000017500000000021711542263760015542 00000000000000; 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 yasm-1.3.0/modules/arch/x86/tests/div-err.errwarn0000644000175000017500000000025011542263760016536 00000000000000-:1: error: cannot override register size -:3: error: cannot override register size -:4: error: cannot override register size -:5: error: cannot override register size yasm-1.3.0/modules/arch/x86/tests/xop-basic.asm0000644000175000017500000000047511542263760016164 00000000000000[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 yasm-1.3.0/modules/arch/x86/tests/o64loop.errwarn0000644000175000017500000000005211542263760016470 00000000000000-:2: warning: ignoring REX prefix on jump yasm-1.3.0/modules/arch/x86/tests/addrop-err.errwarn0000644000175000017500000000007211542263760017227 00000000000000-:2: error: invalid effective address (displacement size) yasm-1.3.0/modules/arch/x86/tests/ripseg.errwarn0000644000175000017500000000054611542263760016467 00000000000000-: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 yasm-1.3.0/modules/arch/x86/tests/bmi2.hex0000644000175000017500000000172011623775055015133 00000000000000c4 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 yasm-1.3.0/modules/arch/x86/tests/stringseg.errwarn0000644000175000017500000000007111542263760017174 00000000000000-:5: warning: multiple segment overrides, using leftmost yasm-1.3.0/modules/arch/x86/tests/cmpxchg.asm0000644000175000017500000000012111542263760015714 00000000000000[bits 64] cmpxchg8b qword [0] cmpxchg8b [0] cmpxchg16b dqword [0] cmpxchg16b [0] yasm-1.3.0/modules/arch/x86/tests/avx16.hex0000644000175000017500000000032011542263760015235 0000000000000066 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 yasm-1.3.0/modules/arch/x86/tests/invpcid.hex0000644000175000017500000000011411623775055015732 0000000000000066 0f 38 82 05 00 00 00 00 66 0f 38 82 04 25 00 00 00 00 yasm-1.3.0/modules/arch/x86/tests/vsib2-err.asm0000644000175000017500000000050311623775055016107 00000000000000; 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 yasm-1.3.0/modules/arch/x86/tests/xsave.asm0000644000175000017500000000011211542263760015411 00000000000000xsave [0] xrstor [0] xgetbv xsetbv xsaveopt [0] [bits 64] xsaveopt64 [0] yasm-1.3.0/modules/arch/x86/tests/cpubasic-err.errwarn0000644000175000017500000000036311542263760017552 00000000000000-: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 yasm-1.3.0/modules/arch/x86/tests/movdq32.asm0000644000175000017500000000037011542263760015564 00000000000000[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 yasm-1.3.0/modules/arch/x86/tests/farbasic.hex0000644000175000017500000000011411542263760016043 00000000000000ea 04 00 00 00 05 00 ea 07 00 00 00 06 00 ea 09 00 08 00 yasm-1.3.0/modules/arch/x86/tests/cyrix.hex0000644000175000017500000000053011542263760015431 000000000000000f 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 yasm-1.3.0/modules/arch/x86/tests/fma.asm0000644000175000017500000002220211542263760015032 00000000000000[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] yasm-1.3.0/modules/arch/x86/tests/ea-warn.errwarn0000644000175000017500000000021611542263760016522 00000000000000-:2: warning: invalid displacement size; fixed -:6: warning: invalid displacement size; fixed -:12: warning: invalid displacement size; fixed yasm-1.3.0/modules/arch/x86/tests/twobytemem.hex0000644000175000017500000000045411542263760016474 000000000000000f 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 yasm-1.3.0/modules/arch/x86/tests/jmpfar.hex0000644000175000017500000000023411542263760015553 00000000000000ea 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 yasm-1.3.0/modules/arch/x86/tests/rep.hex0000644000175000017500000000005411542263760015062 00000000000000f2 ad 66 f2 ad f3 aa f3 a6 f3 a4 yasm-1.3.0/modules/arch/x86/tests/arithsmall.errwarn0000644000175000017500000000015711542263760017334 00000000000000-:6: warning: value does not fit in signed 8 bit field -:12: warning: value does not fit in signed 8 bit field yasm-1.3.0/modules/arch/x86/tests/nomem64.asm0000644000175000017500000000110511542263760015553 00000000000000[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 yasm-1.3.0/modules/arch/x86/tests/simd64-1.asm0000644000175000017500000000003511542263760015533 00000000000000[bits 64] movdqa xmm10, xmm1 yasm-1.3.0/modules/arch/x86/tests/riprel1.asm0000644000175000017500000000477211542263760015661 00000000000000bits 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) yasm-1.3.0/modules/arch/x86/tests/bswap64.asm0000644000175000017500000000003611542263760015556 00000000000000[bits 64] bswap r8 bswap rax yasm-1.3.0/modules/arch/x86/tests/mem64hi32.hex0000644000175000017500000000004411542263760015711 0000000000000067 80 10 12 67 41 80 10 12 yasm-1.3.0/modules/arch/x86/tests/pushnosize.hex0000644000175000017500000000105411542263760016504 000000000000006a 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 yasm-1.3.0/modules/arch/x86/tests/ea-nonzero.hex0000644000175000017500000000002411542263760016346 0000000000000048 8d 6c 2e 05 yasm-1.3.0/modules/arch/x86/tests/pshift.asm0000644000175000017500000000021011542263760015557 00000000000000psrlw 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 yasm-1.3.0/modules/arch/x86/tests/opsize-err.asm0000644000175000017500000000004511542263760016367 00000000000000mov ax,1 mov ax,word 1 mov ax,byte 1 yasm-1.3.0/modules/arch/x86/tests/twobytemem.errwarn0000644000175000017500000000006111542263760017362 00000000000000-:7: warning: value does not fit in 16 bit field yasm-1.3.0/modules/arch/x86/tests/bmi2.asm0000644000175000017500000000260511623775055015132 00000000000000[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 yasm-1.3.0/modules/arch/x86/tests/farbasic.asm0000644000175000017500000000011011542263760016033 00000000000000equval equ 6:7 [bits 32] jmp 5:4 jmp far equval [bits 16] jmp 8:9 yasm-1.3.0/modules/arch/x86/tests/eptvpid.asm0000644000175000017500000000014011542263760015737 00000000000000[bits 32] invept eax, [eax] invvpid eax, [eax] [bits 64] invept rax, [rax] invvpid rax, [rax] yasm-1.3.0/modules/arch/x86/tests/xmm64.asm0000644000175000017500000000005611542263760015245 00000000000000[bits 64] xorps xmm2, xmm2 xorps xmm10, xmm10 yasm-1.3.0/modules/arch/x86/tests/movdq32.hex0000644000175000017500000000054011542263760015567 000000000000000f 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 yasm-1.3.0/modules/arch/x86/tests/mem64.hex0000644000175000017500000000110011542263760015215 0000000000000066 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 yasm-1.3.0/modules/arch/x86/tests/fcmov.hex0000644000175000017500000000010011542263760015376 00000000000000da c1 da d1 da c9 db c1 db d1 db c9 db d9 da d9 yasm-1.3.0/modules/arch/x86/tests/pinsrb.hex0000644000175000017500000000011011542263760015562 0000000000000066 0f 3a 20 e0 55 66 0f 3a 20 e0 55 66 0f 3a 20 e0 55 yasm-1.3.0/modules/arch/x86/tests/mem64rip.asm0000644000175000017500000000017111542263760015733 00000000000000[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 yasm-1.3.0/modules/arch/x86/tests/stringseg.asm0000644000175000017500000000006311542263760016275 00000000000000es stosb es stosw fs stosd gs movsb es fs gs movsw yasm-1.3.0/modules/arch/x86/tests/nomem64-err2.asm0000644000175000017500000000004211542263760016422 00000000000000[bits 64] mov bh, r8b mov r8b, ch yasm-1.3.0/modules/arch/x86/tests/padlock.hex0000644000175000017500000000023011542263760015705 000000000000000f 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 yasm-1.3.0/modules/arch/x86/tests/amd200707.hex0000644000175000017500000000152011542263760015514 0000000000000066 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 yasm-1.3.0/modules/arch/x86/tests/mem64.asm0000644000175000017500000000166511542263760015231 00000000000000[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 yasm-1.3.0/modules/arch/x86/tests/movbe.asm0000644000175000017500000000051111542263760015376 00000000000000[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 yasm-1.3.0/modules/arch/x86/tests/x86_test.sh0000755000175000017500000000014011626275017015606 00000000000000#! /bin/sh ${srcdir}/out_test.sh x86_test modules/arch/x86/tests "x86 arch" "-f bin" "" exit $? yasm-1.3.0/modules/arch/x86/tests/div-err.asm0000644000175000017500000000011611542263760015637 00000000000000div byte si div word si div dword si div byte esi div word esi div dword esi yasm-1.3.0/modules/arch/x86/tests/movdq64.asm0000644000175000017500000000055611542263760015577 00000000000000[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 yasm-1.3.0/modules/arch/x86/tests/o64.hex0000644000175000017500000000013011542263760014677 000000000000000f ae 04 25 00 00 00 00 48 0f ae 04 25 00 00 00 00 0f 07 48 0f 07 yasm-1.3.0/modules/arch/x86/tests/pushf.hex0000644000175000017500000000014011542263760015415 000000000000009c 9c 66 9c 9d 9d 66 9d 9c 66 9c 9c 9d 66 9d 9d 9c 66 9c 9c 9d 66 9d 9d yasm-1.3.0/modules/arch/x86/tests/ea-warn.hex0000644000175000017500000000054011542263760015626 0000000000000001 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 yasm-1.3.0/modules/arch/x86/tests/segoff-err.asm0000644000175000017500000000013011542263760016322 00000000000000; all of these should be illegal jmp far[1:2] mov ax,[1:2] push dword [1:2] mov ax,1:2 yasm-1.3.0/modules/arch/x86/tests/simd64-2.asm0000644000175000017500000000023611542263760015537 00000000000000[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 yasm-1.3.0/modules/arch/x86/tests/opersize.asm0000644000175000017500000000030711542263760016131 00000000000000[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 yasm-1.3.0/modules/arch/x86/tests/jmp64-6.hex0000644000175000017500000000007011542263760015375 00000000000000c7 04 25 00 00 00 00 00 00 00 00 72 01 00 yasm-1.3.0/modules/arch/x86/tests/vsib-err.errwarn0000644000175000017500000000060511623775055016730 00000000000000-: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 yasm-1.3.0/modules/arch/x86/tests/bmi1.asm0000644000175000017500000000207311623775055015130 00000000000000[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 yasm-1.3.0/modules/arch/x86/tests/lds.hex0000644000175000017500000000015411542263760015057 00000000000000c5 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 yasm-1.3.0/modules/arch/x86/tests/gen-fma-test.py0000755000175000017500000000333311542263760016435 00000000000000#!/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) yasm-1.3.0/modules/arch/x86/tests/ripseg.hex0000644000175000017500000000125011542263760015564 0000000000000048 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 yasm-1.3.0/modules/arch/x86/tests/simd-2.hex0000644000175000017500000000355011542263760015373 000000000000000f 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 yasm-1.3.0/modules/arch/x86/tests/jmp64-4.asm0000644000175000017500000000007611542263760015375 00000000000000[bits 64] l1: mov dword [l2], l2 jc l3 db 0x0 l3: l2 equ $-l1 yasm-1.3.0/modules/arch/x86/tests/gas32/0000775000175000017500000000000012372060146014563 500000000000000yasm-1.3.0/modules/arch/x86/tests/gas32/gas32-jmpcall.asm0000644000175000017500000000004711542263760017550 00000000000000call foo calll foo jmp foo #jmpl foo yasm-1.3.0/modules/arch/x86/tests/gas32/align32.asm0000644000175000017500000000153711542263760016455 00000000000000.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 yasm-1.3.0/modules/arch/x86/tests/gas32/gas-farjump.hex0000644000175000017500000000314011542263760017426 000000000000007f 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 yasm-1.3.0/modules/arch/x86/tests/gas32/x86_gas32_test.sh0000755000175000017500000000017511626275017017534 00000000000000#! /bin/sh ${srcdir}/out_test.sh x86_gas32_test modules/arch/x86/tests/gas32 "x86 gas format" "-f elf32 -p gas" ".o" exit $? yasm-1.3.0/modules/arch/x86/tests/gas32/Makefile.inc0000644000175000017500000000237311626275017016724 00000000000000TESTS += 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 yasm-1.3.0/modules/arch/x86/tests/gas32/align32.hex0000644000175000017500000000414011542263760016452 000000000000007f 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 yasm-1.3.0/modules/arch/x86/tests/gas32/gas-movdq32.asm0000644000175000017500000000037011542263760017253 00000000000000movd %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 yasm-1.3.0/modules/arch/x86/tests/gas32/gas-loop32.hex0000644000175000017500000000274011542263760017105 000000000000007f 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 yasm-1.3.0/modules/arch/x86/tests/gas32/gas-invlpg.hex0000644000175000017500000000264011542263760017265 000000000000007f 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 yasm-1.3.0/modules/arch/x86/tests/gas32/gas-invlpg.asm0000644000175000017500000000001711542263760017255 00000000000000invlpg (%eax) yasm-1.3.0/modules/arch/x86/tests/gas32/gas-farithr.asm0000644000175000017500000000064511542263760017424 00000000000000.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 yasm-1.3.0/modules/arch/x86/tests/gas32/gas-pop.hex0000644000175000017500000000344011623775055016570 000000000000007f 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 yasm-1.3.0/modules/arch/x86/tests/gas32/gas-movsd.asm0000644000175000017500000000002211542263760017102 00000000000000.text movsd movsl yasm-1.3.0/modules/arch/x86/tests/gas32/gas-farjump.asm0000644000175000017500000000030611542263760017423 00000000000000call $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 yasm-1.3.0/modules/arch/x86/tests/gas32/gas-pop.asm0000644000175000017500000000217711623775055016572 00000000000000.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 yasm-1.3.0/modules/arch/x86/tests/gas32/gas-movsd.hex0000644000175000017500000000264011542263760017116 000000000000007f 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 yasm-1.3.0/modules/arch/x86/tests/gas32/gas-fpmem.asm0000644000175000017500000000016311542263760017064 00000000000000.text fcomp fcomp %st(1) fcomp 0(%eax) fcomps 0(%eax) fcompl 0(%eax) fistp 0(%eax) fistps 0(%eax) fistpl 0(%eax) yasm-1.3.0/modules/arch/x86/tests/gas32/gas32-jmpcall.hex0000644000175000017500000000350011542263760017551 000000000000007f 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 yasm-1.3.0/modules/arch/x86/tests/gas32/gas-movdq32.hex0000644000175000017500000000334011542263760017257 000000000000007f 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 yasm-1.3.0/modules/arch/x86/tests/gas32/gas-loop32.asm0000644000175000017500000000006711542263760017101 00000000000000loop label loopw label loopl label #loopq label label: yasm-1.3.0/modules/arch/x86/tests/gas32/gas-farithr.hex0000644000175000017500000000274011542263760017426 000000000000007f 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 yasm-1.3.0/modules/arch/x86/tests/gas32/gas-fpmem.hex0000644000175000017500000000274011542263760017073 000000000000007f 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 yasm-1.3.0/modules/arch/x86/tests/bittest.asm0000644000175000017500000000001311542263760015741 00000000000000btr eax, 4 yasm-1.3.0/modules/arch/x86/tests/iret.hex0000644000175000017500000000007011542263760015235 00000000000000cf cf 66 cf cf 66 cf cf cf 66 cf cf 48 cf yasm-1.3.0/modules/arch/x86/tests/jmp64-5.asm0000644000175000017500000000011411542263760015367 00000000000000[bits 64] l1: mov dword [l2], l2 jc l3 times 0x10001 db 0x0 l3: l2 equ $-l1 yasm-1.3.0/modules/arch/x86/tests/x86label.hex0000644000175000017500000000001011542263760015711 00000000000000eb fe yasm-1.3.0/modules/arch/x86/tests/addbyte.errwarn0000644000175000017500000000034011542263760016602 00000000000000-: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 yasm-1.3.0/modules/arch/x86/tests/amd-fma4.asm0000644000175000017500000000650611542263760015666 00000000000000[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] yasm-1.3.0/modules/arch/x86/tests/jmp64-6.asm0000644000175000017500000000010011542263760015363 00000000000000[bits 64] mov dword [l4-l1], 0x0 l4: l1: jc short l3 db 0x0 l3: yasm-1.3.0/modules/arch/x86/tests/smx.asm0000644000175000017500000000002211542263760015072 00000000000000[bits 32] getsec yasm-1.3.0/modules/arch/x86/tests/nomem64-err2.errwarn0000644000175000017500000000017211542263760017326 00000000000000-:2: error: cannot use A/B/C/DH with instruction needing REX -:3: error: cannot use A/B/C/DH with instruction needing REX yasm-1.3.0/modules/arch/x86/tests/shift.asm0000644000175000017500000000007611542263760015411 00000000000000blah equ 1 shl al, 1 shl al, 2-1 shl al, blah shl al, 2-blah yasm-1.3.0/modules/arch/x86/tests/rep.asm0000644000175000017500000000007011542263760015054 00000000000000repne lodsw repnz lodsd rep stosb repe cmpsb repz movsb yasm-1.3.0/modules/arch/x86/tests/lds.asm0000644000175000017500000000013311542263760015050 00000000000000lds ax,[1] lds ax,word [1] lds ax,dword [1] lds eax,[1] lds eax,word [1] lds eax,dword [1] yasm-1.3.0/modules/arch/x86/tests/simd-1.asm0000644000175000017500000000031311542263760015360 00000000000000[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 yasm-1.3.0/modules/arch/x86/tests/lfs64.hex0000644000175000017500000000020411623775055015234 0000000000000066 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 yasm-1.3.0/modules/arch/x86/tests/lsahf.hex0000644000175000017500000000003011542263760015363 000000000000009f 9e 9f 9e 9f 9e yasm-1.3.0/modules/arch/x86/tests/svm.asm0000644000175000017500000000067611542263760015107 00000000000000[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] yasm-1.3.0/modules/arch/x86/tests/ret.asm0000644000175000017500000000034011542263760015060 00000000000000[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 yasm-1.3.0/modules/arch/x86/tests/imm64.asm0000644000175000017500000000255511542263760015234 00000000000000bits 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 yasm-1.3.0/modules/arch/x86/tests/jmpfar.asm0000644000175000017500000000135211542263760015551 00000000000000jmp 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 yasm-1.3.0/modules/arch/x86/tests/fsgsbase.hex0000644000175000017500000000022011542263760016064 00000000000000f3 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 yasm-1.3.0/modules/arch/x86/tests/addrop.errwarn0000644000175000017500000000006011542263760016436 00000000000000-:22: warning: invalid displacement size; fixed yasm-1.3.0/modules/arch/x86/tests/vmx-err.errwarn0000644000175000017500000000011611542263760016567 00000000000000-:6: error: invalid size for operand 2 -:7: error: invalid size for operand 1 yasm-1.3.0/modules/arch/x86/tests/xop-basic.hex0000644000175000017500000000027411542263760016165 000000000000008f 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 yasm-1.3.0/modules/arch/x86/tests/farithr.hex0000644000175000017500000000010011542263760015723 00000000000000d8 e1 de e9 d8 e9 de e1 d8 f1 de f9 d8 f9 de f1 yasm-1.3.0/modules/arch/x86/tests/avx.hex0000644000175000017500000012056011623775055015104 0000000000000066 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 yasm-1.3.0/modules/arch/x86/tests/pinsrb.asm0000644000175000017500000000014311542263760015564 00000000000000[bits 16] pinsrb xmm4, eax, 0x55 [bits 32] pinsrb xmm4, eax, 0x55 [bits 64] pinsrb xmm4, eax, 0x55 yasm-1.3.0/modules/arch/x86/tests/invpcid.asm0000644000175000017500000000020311623775055015725 00000000000000[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 yasm-1.3.0/modules/arch/x86/tests/genopcode.hex0000644000175000017500000000367411542263760016252 00000000000000b0 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 yasm-1.3.0/modules/arch/x86/tests/imm64.errwarn0000664000175000017500000000022612371621045016122 00000000000000-: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 yasm-1.3.0/modules/arch/x86/tests/cpubasic-err.asm0000644000175000017500000000015411542263760016650 00000000000000[cpu 8086] pause shl ax, 2 cpu 386 fninit cpu 386 fpu fninit cpu 8086 shl ax, 1 shl ax, 2 movsd push 0 yasm-1.3.0/modules/arch/x86/tests/simd64-1.hex0000644000175000017500000000002411542263760015535 0000000000000066 44 0f 6f d1 yasm-1.3.0/modules/arch/x86/tests/stos.hex0000644000175000017500000000007011542263760015262 00000000000000aa ab 66 ab aa 66 ab ab aa 66 ab ab 48 ab yasm-1.3.0/modules/arch/x86/tests/f16c.hex0000644000175000017500000000040011542263760015026 00000000000000c4 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 yasm-1.3.0/modules/arch/x86/tests/rdrnd.hex0000644000175000017500000000005411542263760015405 0000000000000066 0f c7 f1 0f c7 f1 48 0f c7 f1 yasm-1.3.0/modules/arch/x86/Makefile.inc0000664000175000017500000000377112335722632014646 00000000000000libyasm_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 yasm-1.3.0/modules/arch/x86/CMakeLists.txt0000644000175000017500000000256511542263760015175 00000000000000ADD_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}" ) yasm-1.3.0/modules/arch/x86/x86arch.h0000664000175000017500000003313612333771162014070 00000000000000/* * 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 yasm-1.3.0/modules/arch/x86/x86arch.c0000664000175000017500000005726212333771162014071 00000000000000/* * 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 }; yasm-1.3.0/modules/arch/x86/x86expr.c0000664000175000017500000011442412371736130014122 00000000000000/* * 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; } yasm-1.3.0/modules/arch/x86/x86bc.c0000664000175000017500000011122212333771162013523 00000000000000/* * 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; } yasm-1.3.0/modules/arch/x86/x86id.c0000664000175000017500000022514512371621045013541 00000000000000/* * 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); } yasm-1.3.0/modules/arch/x86/x86cpu.gperf0000664000175000017500000003560312333771162014617 00000000000000# # 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; } yasm-1.3.0/modules/arch/x86/x86regtmod.gperf0000644000175000017500000001747611626275017015501 00000000000000# # 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; } yasm-1.3.0/modules/arch/Makefile.inc0000644000175000017500000000057111626275017014214 00000000000000EXTRA_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 yasm-1.3.0/modules/arch/CMakeLists.txt0000644000175000017500000000010311542263760014532 00000000000000INCLUDE(arch/lc3b/CMakeLists.txt) INCLUDE(arch/x86/CMakeLists.txt) yasm-1.3.0/modules/arch/yasm_arch.xml0000664000175000017500000004005012333771162014470 00000000000000 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 .
yasm-1.3.0/modules/arch/lc3b/0000775000175000017500000000000012372060147012701 500000000000000yasm-1.3.0/modules/arch/lc3b/lc3bbc.c0000644000175000017500000002065411626275017014127 00000000000000/* * 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; } yasm-1.3.0/modules/arch/lc3b/tests/0000775000175000017500000000000012372060146014042 500000000000000yasm-1.3.0/modules/arch/lc3b/tests/lc3b-br.asm0000644000175000017500000000013411542263760015711 00000000000000br label brn label brz label brp label brnz label brnp label brzp label brnzp label label: yasm-1.3.0/modules/arch/lc3b/tests/Makefile.inc0000644000175000017500000000110511626275017016173 00000000000000TESTS += 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 yasm-1.3.0/modules/arch/lc3b/tests/lc3b_test.sh0000755000175000017500000000015311626275017016206 00000000000000#! /bin/sh ${srcdir}/out_test.sh lc3b_test modules/arch/lc3b/tests "lc3b arch" "-a lc3b -f bin" "" exit $? yasm-1.3.0/modules/arch/lc3b/tests/lc3b-mp22NC.hex0000644000175000017500000000400011542263760016307 000000000000003f 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 yasm-1.3.0/modules/arch/lc3b/tests/lc3b-br.hex0000644000175000017500000000010011542263760015706 0000000000000007 00 06 08 05 04 04 02 03 0c 02 0a 01 06 00 0e yasm-1.3.0/modules/arch/lc3b/tests/lc3b-basic.errwarn0000644000175000017500000000006711542263760017274 00000000000000-:2: warning: value does not fit in signed 5 bit field yasm-1.3.0/modules/arch/lc3b/tests/lc3b-ea-err.errwarn0000644000175000017500000000006711542263760017366 00000000000000-:1: error: invalid combination of opcode and operands yasm-1.3.0/modules/arch/lc3b/tests/lc3b-ea-err.asm0000644000175000017500000000001611542263760016460 00000000000000ld r5, [r6+5] yasm-1.3.0/modules/arch/lc3b/tests/lc3b-mp22NC.asm0000644000175000017500000001324311542263760016314 00000000000000; 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 yasm-1.3.0/modules/arch/lc3b/tests/lc3b-basic.asm0000644000175000017500000000013711542263760016372 00000000000000add r7, r6, r5 add r4, r3, 22 label: and r2, r1, r0 and r2, r5, 5 brz label br label2 label2: yasm-1.3.0/modules/arch/lc3b/tests/lc3b-basic.hex0000644000175000017500000000006011542263760016371 0000000000000085 1f f6 18 40 54 65 55 fd 05 00 00 yasm-1.3.0/modules/arch/lc3b/lc3bid.re0000644000175000017500000003754511626275017014332 00000000000000/* * 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); } yasm-1.3.0/modules/arch/lc3b/Makefile.inc0000644000175000017500000000100511626275017015030 00000000000000libyasm_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 yasm-1.3.0/modules/arch/lc3b/CMakeLists.txt0000644000175000017500000000032311542263760015361 00000000000000YASM_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 ) yasm-1.3.0/modules/arch/lc3b/lc3barch.h0000644000175000017500000000573611626275017014471 00000000000000/* * 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 yasm-1.3.0/modules/arch/lc3b/lc3barch.c0000644000175000017500000001366611626275017014465 00000000000000/* * 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 }; yasm-1.3.0/modules/dbgfmts/0000775000175000017500000000000012372060147012567 500000000000000yasm-1.3.0/modules/dbgfmts/Makefile.inc0000644000175000017500000000114111626275017014717 00000000000000EXTRA_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 yasm-1.3.0/modules/dbgfmts/CMakeLists.txt0000644000175000017500000000023311542263760015247 00000000000000INCLUDE(dbgfmts/codeview/CMakeLists.txt) INCLUDE(dbgfmts/dwarf2/CMakeLists.txt) INCLUDE(dbgfmts/null/CMakeLists.txt) INCLUDE(dbgfmts/stabs/CMakeLists.txt) yasm-1.3.0/modules/dbgfmts/null/0000775000175000017500000000000012372060147013541 500000000000000yasm-1.3.0/modules/dbgfmts/null/Makefile.inc0000644000175000017500000000012511626275017015672 00000000000000libyasm_a_SOURCES += modules/dbgfmts/null/null-dbgfmt.c YASM_MODULES += dbgfmt_null yasm-1.3.0/modules/dbgfmts/null/CMakeLists.txt0000644000175000017500000000010111542263760016213 00000000000000YASM_ADD_MODULE(dbgfmt_null dbgfmts/null/null-dbgfmt.c ) yasm-1.3.0/modules/dbgfmts/null/null-dbgfmt.c0000644000175000017500000000424011626275017016043 00000000000000/* * 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 }; yasm-1.3.0/modules/dbgfmts/yasm_dbgfmts.xml0000644000175000017500000000732411626275017015721 00000000000000 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
yasm-1.3.0/modules/dbgfmts/stabs/0000775000175000017500000000000012372060147013703 500000000000000yasm-1.3.0/modules/dbgfmts/stabs/tests/0000775000175000017500000000000012372060146015044 500000000000000yasm-1.3.0/modules/dbgfmts/stabs/tests/stabs-elf.asm0000644000175000017500000000414111542263760017351 00000000000000; 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] yasm-1.3.0/modules/dbgfmts/stabs/tests/Makefile.inc0000644000175000017500000000033411626275017017200 00000000000000EXTRA_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 yasm-1.3.0/modules/dbgfmts/stabs/tests/stabs-elf.hex0000644000175000017500000001460011542263760017356 000000000000007f 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 yasm-1.3.0/modules/dbgfmts/stabs/tests/stabs_test.sh0000755000175000017500000000030211626275017017475 00000000000000#! /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 $? yasm-1.3.0/modules/dbgfmts/stabs/Makefile.inc0000644000175000017500000000030111626275017016030 00000000000000libyasm_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 yasm-1.3.0/modules/dbgfmts/stabs/CMakeLists.txt0000644000175000017500000000010411542263760016360 00000000000000YASM_ADD_MODULE(dbgfmt_stabs dbgfmts/stabs/stabs-dbgfmt.c ) yasm-1.3.0/modules/dbgfmts/stabs/stabs-dbgfmt.c0000664000175000017500000004332612371736130016355 00000000000000/* * 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 }; yasm-1.3.0/modules/dbgfmts/dwarf2/0000775000175000017500000000000012372060147013754 500000000000000yasm-1.3.0/modules/dbgfmts/dwarf2/dwarf2-dbgfmt.h0000644000175000017500000001147511626275017016506 00000000000000/* * 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 yasm-1.3.0/modules/dbgfmts/dwarf2/tests/0000775000175000017500000000000012372060145015114 500000000000000yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass64/0000775000175000017500000000000012372060146016235 500000000000000yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass64/dwarf64_leb128.hex0000644000175000017500000131110011542263760021215 000000000000007f 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 yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass64/dwarf64_leb128.asm0000644000175000017500000041162111542263760021221 00000000000000 .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 yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass64/Makefile.inc0000644000175000017500000000063511626275017020375 00000000000000TESTS += 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 yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass64/dwarf64_2loc.hex0000644000175000017500000000670011542263760021065 000000000000007f 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 yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass64/dwarf64_2loc.asm0000644000175000017500000000014411542263760021055 00000000000000.file 1 "dwarf64_2loc.c" .text .loc 1 1 0 .loc 1 2 0 xorq %rax, %rax .section .debug_info .byte 1 yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass64/dwarf2_pass64_test.sh0000755000175000017500000000023011626275017022137 00000000000000#! /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 $? yasm-1.3.0/modules/dbgfmts/dwarf2/tests/gen64/0000775000175000017500000000000012372060146016040 500000000000000yasm-1.3.0/modules/dbgfmts/dwarf2/tests/gen64/Makefile.inc0000644000175000017500000000042511626275017020175 00000000000000TESTS += 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 yasm-1.3.0/modules/dbgfmts/dwarf2/tests/gen64/dwarf64_pathname.hex0000644000175000017500000001460011623775055021631 000000000000007f 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 yasm-1.3.0/modules/dbgfmts/dwarf2/tests/gen64/dwarf2_gen64_test.sh0000755000175000017500000000021611626275017021551 00000000000000#! /bin/sh ${srcdir}/out_test.sh dwarf2_gen64_test modules/dbgfmts/dwarf2/tests/gen64 "dwarf2 dbgfmt gen64" "-f elf64 -g dwarf2" ".o" exit $? yasm-1.3.0/modules/dbgfmts/dwarf2/tests/gen64/dwarf64_pathname.asm0000644000175000017500000000044311542263760021620 00000000000000[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 yasm-1.3.0/modules/dbgfmts/dwarf2/tests/Makefile.inc0000644000175000017500000000074511626275017017257 00000000000000EXTRA_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 yasm-1.3.0/modules/dbgfmts/dwarf2/tests/passwin64/0000775000175000017500000000000012372060146016753 500000000000000yasm-1.3.0/modules/dbgfmts/dwarf2/tests/passwin64/dwarfwin64_testhd.hex0000644000175000017500000007313011542263760022756 0000000000000064 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 yasm-1.3.0/modules/dbgfmts/dwarf2/tests/passwin64/dwarfwin64_testhd.asm0000644000175000017500000003676711542263760022771 00000000000000 .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 yasm-1.3.0/modules/dbgfmts/dwarf2/tests/passwin64/Makefile.inc0000644000175000017500000000057611626275017021117 00000000000000TESTS += 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 yasm-1.3.0/modules/dbgfmts/dwarf2/tests/passwin64/dwarf2_passwin64_test.sh0000755000175000017500000000024111626275017023375 00000000000000#! /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 $? yasm-1.3.0/modules/dbgfmts/dwarf2/tests/passwin64/dwarfwin64_testhd.errwarn0000644000175000017500000000155011542263760023647 00000000000000-: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' yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass32/0000775000175000017500000000000012372060146016230 500000000000000yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass32/dwarf32_testhd.hex0000644000175000017500000005630011542263760021510 000000000000007f 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 yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass32/Makefile.inc0000644000175000017500000000063711626275017020372 00000000000000TESTS += 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 yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass32/dwarf32-err.asm0000644000175000017500000000102011542263760020704 00000000000000.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 yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass32/dwarf32_testhd.asm0000644000175000017500000003203111542263760021477 00000000000000 .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" yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass32/dwarf2_pass32_test.sh0000755000175000017500000000022611626275017022132 00000000000000#! /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 $? yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass32/dwarf32-err.errwarn0000644000175000017500000000155311542263760021617 00000000000000-: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 yasm-1.3.0/modules/dbgfmts/dwarf2/Makefile.inc0000644000175000017500000000066311626275017016114 00000000000000libyasm_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 yasm-1.3.0/modules/dbgfmts/dwarf2/CMakeLists.txt0000644000175000017500000000025511542263760016440 00000000000000YASM_ADD_MODULE(dbgfmt_dwarf2 dbgfmts/dwarf2/dwarf2-dbgfmt.c dbgfmts/dwarf2/dwarf2-line.c dbgfmts/dwarf2/dwarf2-aranges.c dbgfmts/dwarf2/dwarf2-info.c ) yasm-1.3.0/modules/dbgfmts/dwarf2/dwarf2-line.c0000664000175000017500000011703112371736130016156 00000000000000/* * 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)); } yasm-1.3.0/modules/dbgfmts/dwarf2/dwarf2-info.c0000644000175000017500000003270311626275017016166 00000000000000/* * 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; } yasm-1.3.0/modules/dbgfmts/dwarf2/dwarf2-aranges.c0000644000175000017500000001132511626275017016650 00000000000000/* * 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; } yasm-1.3.0/modules/dbgfmts/dwarf2/dwarf2-dbgfmt.c0000644000175000017500000002622511626275017016500 00000000000000/* * 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 }; yasm-1.3.0/modules/dbgfmts/codeview/0000775000175000017500000000000012372060147014374 500000000000000yasm-1.3.0/modules/dbgfmts/codeview/Makefile.inc0000644000175000017500000000064411626275017016533 00000000000000libyasm_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 yasm-1.3.0/modules/dbgfmts/codeview/cv8.txt0000664000175000017500000000672112333771162015566 00000000000000 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 yasm-1.3.0/modules/dbgfmts/codeview/CMakeLists.txt0000644000175000017500000000020311542263760017051 00000000000000YASM_ADD_MODULE(dbgfmt_cv8 dbgfmts/codeview/cv-dbgfmt.c dbgfmts/codeview/cv-symline.c dbgfmts/codeview/cv-type.c ) yasm-1.3.0/modules/dbgfmts/codeview/cv-dbgfmt.h0000644000175000017500000000453111626275017016344 00000000000000/* * 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 yasm-1.3.0/modules/dbgfmts/codeview/cv-symline.c0000664000175000017500000010770712333771162016565 00000000000000/* * 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; } yasm-1.3.0/modules/dbgfmts/codeview/cv-dbgfmt.c0000644000175000017500000000700211626275017016333 00000000000000/* * 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 }; yasm-1.3.0/modules/dbgfmts/codeview/cv-type.c0000644000175000017500000010506011626275017016054 00000000000000/* * 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; } yasm-1.3.0/modules/Makefile.inc0000644000175000017500000000066411626275017013302 00000000000000EXTRA_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 yasm-1.3.0/modules/objfmts/0000775000175000017500000000000012372060147012605 500000000000000yasm-1.3.0/modules/objfmts/win64/0000775000175000017500000000000012372060145013552 500000000000000yasm-1.3.0/modules/objfmts/win64/tests/0000775000175000017500000000000012372060147014716 500000000000000yasm-1.3.0/modules/objfmts/win64/tests/sce1.asm0000644000175000017500000000212211542263760016172 00000000000000PROC_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 yasm-1.3.0/modules/objfmts/win64/tests/sce2-err.errwarn0000644000175000017500000000011411542263760017660 00000000000000-: error: end of file in procedure frame -:1: error: procedure started here yasm-1.3.0/modules/objfmts/win64/tests/sce1-err.errwarn0000644000175000017500000000061311542263760017663 00000000000000-: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] yasm-1.3.0/modules/objfmts/win64/tests/win64-dataref.masm0000644000175000017500000000535111542263760020076 00000000000000public 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 yasm-1.3.0/modules/objfmts/win64/tests/win64-abs.asm0000644000175000017500000000002611542263760017052 00000000000000mov rax, [rel 0x1000] yasm-1.3.0/modules/objfmts/win64/tests/sce3.masm0000644000175000017500000000306511542263760016360 00000000000000include 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 yasm-1.3.0/modules/objfmts/win64/tests/win64-abs.hex0000644000175000017500000000125411542263760017062 0000000000000064 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 yasm-1.3.0/modules/objfmts/win64/tests/Makefile.inc0000664000175000017500000000357512333771162017063 00000000000000TESTS += 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 yasm-1.3.0/modules/objfmts/win64/tests/win64-curpos.hex0000644000175000017500000000371411542263760017633 0000000000000064 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 yasm-1.3.0/modules/objfmts/win64/tests/sce3.asm0000644000175000017500000000322211542263760016176 00000000000000PROC_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 yasm-1.3.0/modules/objfmts/win64/tests/sce1.hex0000644000175000017500000000327011542263760016203 0000000000000064 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 yasm-1.3.0/modules/objfmts/win64/tests/win64-dataref2.masm0000644000175000017500000000026711542263760020161 00000000000000 _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 yasm-1.3.0/modules/objfmts/win64/tests/win64-imagebase.hex0000664000175000017500000000400012333771162020223 0000000000000064 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 yasm-1.3.0/modules/objfmts/win64/tests/sce1-err.asm0000644000175000017500000000104511542263760016763 00000000000000PROC_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] yasm-1.3.0/modules/objfmts/win64/tests/sce4-err.asm0000644000175000017500000000056111542263760016770 00000000000000; 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 yasm-1.3.0/modules/objfmts/win64/tests/win64_test.sh0000755000175000017500000000016111626275017017204 00000000000000#! /bin/sh ${srcdir}/out_test.sh win64_test modules/objfmts/win64/tests "win64 objfmt" "-f win64" ".obj" exit $? yasm-1.3.0/modules/objfmts/win64/tests/win64-dataref2.asm0000644000175000017500000000031511542263760017776 00000000000000bits 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 yasm-1.3.0/modules/objfmts/win64/tests/win64-curpos.asm0000644000175000017500000000066111542263760017625 00000000000000global 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 yasm-1.3.0/modules/objfmts/win64/tests/sce4-err.errwarn0000644000175000017500000000071411542263760017670 00000000000000-: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 yasm-1.3.0/modules/objfmts/win64/tests/win64-function.hex0000664000175000017500000000115012333771162020136 0000000000000064 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 yasm-1.3.0/modules/objfmts/win64/tests/win64-dataref2.hex0000644000175000017500000000253411542263760020007 0000000000000064 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 yasm-1.3.0/modules/objfmts/win64/tests/sce4.hex0000644000175000017500000000506011542263760016205 0000000000000064 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 yasm-1.3.0/modules/objfmts/win64/tests/win64-imagebase.asm0000664000175000017500000000030412333771162020222 00000000000000[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 yasm-1.3.0/modules/objfmts/win64/tests/sce2.asm0000644000175000017500000000110011542263760016166 00000000000000struc 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 yasm-1.3.0/modules/objfmts/win64/tests/sce2.hex0000644000175000017500000000546411542263760016213 0000000000000064 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 yasm-1.3.0/modules/objfmts/win64/tests/sce2-err.asm0000644000175000017500000000004211542263760016760 00000000000000PROC_FRAME sample4 [pushreg rbp] yasm-1.3.0/modules/objfmts/win64/tests/win64-dataref.asm0000644000175000017500000000661011542263760017720 00000000000000BITS 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] yasm-1.3.0/modules/objfmts/win64/tests/sce3.hex0000644000175000017500000000655411542263760016215 0000000000000064 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 yasm-1.3.0/modules/objfmts/win64/tests/win64-dataref.hex0000644000175000017500000002327411542263760017731 0000000000000064 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 yasm-1.3.0/modules/objfmts/win64/tests/sce4.asm0000644000175000017500000000130211542263760016174 00000000000000PROC_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 yasm-1.3.0/modules/objfmts/win64/tests/sce4.masm0000644000175000017500000000131411542263760016354 00000000000000 _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 yasm-1.3.0/modules/objfmts/win64/tests/gas/0000775000175000017500000000000012372060147015470 500000000000000yasm-1.3.0/modules/objfmts/win64/tests/gas/Makefile.inc0000644000175000017500000000037411626275017017627 00000000000000TESTS += 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 yasm-1.3.0/modules/objfmts/win64/tests/gas/win64-gas-sce.asm0000644000175000017500000000027211542263760020404 00000000000000PROC_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 yasm-1.3.0/modules/objfmts/win64/tests/gas/win64_gas_test.sh0000755000175000017500000000021011626275017020603 00000000000000#! /bin/sh ${srcdir}/out_test.sh win64_gas_test modules/objfmts/win64/tests/gas "win64 objfmt" "-f win64 -p gas -r nasm" ".obj" exit $? yasm-1.3.0/modules/objfmts/win64/tests/gas/win64-gas-sce.hex0000644000175000017500000000307411542263760020413 0000000000000064 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 yasm-1.3.0/modules/objfmts/win64/tests/win64-function.asm0000664000175000017500000000003512333771162020133 00000000000000global _foo:function _foo: yasm-1.3.0/modules/objfmts/win64/Makefile.inc0000644000175000017500000000026411626275017015711 00000000000000# 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 yasm-1.3.0/modules/objfmts/xdf/0000775000175000017500000000000012372060147013366 500000000000000yasm-1.3.0/modules/objfmts/xdf/tests/0000775000175000017500000000000012372060147014530 500000000000000yasm-1.3.0/modules/objfmts/xdf/tests/xdfother.hex0000644000175000017500000000441011542263760017002 0000000000000022 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 yasm-1.3.0/modules/objfmts/xdf/tests/xdflong.asm0000644000175000017500000001604111542263760016617 00000000000000;; ######################################################################## ;; 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 yasm-1.3.0/modules/objfmts/xdf/tests/xdfvirtual.asm0000644000175000017500000000017711542263760017351 00000000000000[section .foo] [section .bar absolute=0x5000] [section .bar2 virtual=0xFFFFFFF0] [section .baz absolute=0x1000 virtual=0x8000] yasm-1.3.0/modules/objfmts/xdf/tests/xdfother.asm0000644000175000017500000000041111542263760016773 00000000000000extern 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 yasm-1.3.0/modules/objfmts/xdf/tests/xdf_test.sh0000755000175000017500000000015111626275017016627 00000000000000#! /bin/sh ${srcdir}/out_test.sh xdf_test modules/objfmts/xdf/tests "xdf objfmt" "-f xdf" ".xdf" exit $? yasm-1.3.0/modules/objfmts/xdf/tests/xdf-overdef.asm0000644000175000017500000000003011542263760017356 00000000000000section .text align=64 yasm-1.3.0/modules/objfmts/xdf/tests/Makefile.inc0000644000175000017500000000162611626275017016670 00000000000000TESTS += 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 yasm-1.3.0/modules/objfmts/xdf/tests/xdflong.errwarn0000644000175000017500000000006311542263760017514 00000000000000-:123: warning: value does not fit in 16 bit field yasm-1.3.0/modules/objfmts/xdf/tests/xdfvirtual.hex0000644000175000017500000000241411542263760017351 0000000000000022 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 yasm-1.3.0/modules/objfmts/xdf/tests/xdflong.hex0000644000175000017500000056570011542263760016636 0000000000000022 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 yasm-1.3.0/modules/objfmts/xdf/tests/xdfsect.asm0000644000175000017500000000051311542263760016613 00000000000000section 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 yasm-1.3.0/modules/objfmts/xdf/tests/xdf-overdef.hex0000644000175000017500000000047011542263760017372 0000000000000022 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 yasm-1.3.0/modules/objfmts/xdf/tests/xdfprotect.asm0000644000175000017500000001336311542263760017344 00000000000000;; ######################################################################## ;; 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 yasm-1.3.0/modules/objfmts/xdf/tests/xdfprotect.hex0000644000175000017500000001607011542263760017346 0000000000000022 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 yasm-1.3.0/modules/objfmts/xdf/tests/xdfsect-err.errwarn0000644000175000017500000000171311542263760020304 00000000000000-: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 yasm-1.3.0/modules/objfmts/xdf/tests/xdfsect.hex0000644000175000017500000000642011542263760016622 0000000000000022 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 yasm-1.3.0/modules/objfmts/xdf/tests/xdfsect-err.asm0000644000175000017500000000052411542263760017403 00000000000000[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" yasm-1.3.0/modules/objfmts/xdf/Makefile.inc0000644000175000017500000000027011626275017015520 00000000000000libyasm_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 yasm-1.3.0/modules/objfmts/xdf/CMakeLists.txt0000644000175000017500000000007611542263760016053 00000000000000YASM_ADD_MODULE(objfmt_xdf objfmts/xdf/xdf-objfmt.c ) yasm-1.3.0/modules/objfmts/xdf/xdf-objfmt.c0000664000175000017500000006751112371736130015525 00000000000000/* * 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 }; yasm-1.3.0/modules/objfmts/dbg/0000775000175000017500000000000012372060147013341 500000000000000yasm-1.3.0/modules/objfmts/dbg/Makefile.inc0000644000175000017500000000012211626275017015467 00000000000000libyasm_a_SOURCES += modules/objfmts/dbg/dbg-objfmt.c YASM_MODULES += objfmt_dbg yasm-1.3.0/modules/objfmts/dbg/CMakeLists.txt0000644000175000017500000000007611542263760016026 00000000000000YASM_ADD_MODULE(objfmt_dbg objfmts/dbg/dbg-objfmt.c ) yasm-1.3.0/modules/objfmts/dbg/dbg-objfmt.c0000644000175000017500000001373411626275017015453 00000000000000/* * 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 }; yasm-1.3.0/modules/objfmts/Makefile.inc0000644000175000017500000000215511626275017014743 00000000000000EXTRA_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 yasm-1.3.0/modules/objfmts/CMakeLists.txt0000644000175000017500000000051511542263760015270 00000000000000INCLUDE(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) yasm-1.3.0/modules/objfmts/bin/0000775000175000017500000000000012372060147013355 500000000000000yasm-1.3.0/modules/objfmts/bin/tests/0000775000175000017500000000000012372060146014516 500000000000000yasm-1.3.0/modules/objfmts/bin/tests/abs.asm0000644000175000017500000000011611542263760015706 00000000000000[absolute 0f0000000h] foo: resb 1 [section .data] bar dd foo baz db (foo>>24) yasm-1.3.0/modules/objfmts/bin/tests/levelop.hex0000644000175000017500000000006011542263760016611 00000000000000c7 06 1c 00 00 00 c7 06 1c 00 00 00 yasm-1.3.0/modules/objfmts/bin/tests/reserve.asm0000644000175000017500000000015611542263760016620 00000000000000; 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 yasm-1.3.0/modules/objfmts/bin/tests/float.asm0000644000175000017500000000032711542263760016252 00000000000000; 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 yasm-1.3.0/modules/objfmts/bin/tests/float.hex0000644000175000017500000000030011542263760016245 0000000000000048 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 yasm-1.3.0/modules/objfmts/bin/tests/shr.asm0000644000175000017500000000005711542263760015741 00000000000000x: mov al, x>>8 times 256 db 0 y: mov ah, y>>8 yasm-1.3.0/modules/objfmts/bin/tests/Makefile.inc0000644000175000017500000000315411626275017016655 00000000000000TESTS += 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 yasm-1.3.0/modules/objfmts/bin/tests/bigorg.hex0000644000175000017500000000023011542263760016413 0000000000000022 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 yasm-1.3.0/modules/objfmts/bin/tests/bin-farabs.hex0000644000175000017500000000035411542263760017155 00000000000000b8 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 yasm-1.3.0/modules/objfmts/bin/tests/bintest.asm0000644000175000017500000000253511542263760016620 00000000000000; 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] yasm-1.3.0/modules/objfmts/bin/tests/abs.hex0000644000175000017500000000002411542263760015710 0000000000000000 00 00 f0 f0 yasm-1.3.0/modules/objfmts/bin/tests/bigorg.asm0000644000175000017500000000016411542263760016415 00000000000000[bits 64] [org 0x000ffff100000000] dd end-start start: mov rax, $ mov rbx, $ mov rax, qword $ mov rbx, qword $ end: yasm-1.3.0/modules/objfmts/bin/tests/bin_test.sh0000755000175000017500000000014511626275017016610 00000000000000#! /bin/sh ${srcdir}/out_test.sh bin_test modules/objfmts/bin/tests "bin objfmt" "-f bin" "" exit $? yasm-1.3.0/modules/objfmts/bin/tests/bin-rip.hex0000644000175000017500000000027011542263760016506 0000000000000090 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 yasm-1.3.0/modules/objfmts/bin/tests/integer.hex0000644000175000017500000000014411542263760016603 0000000000000051 75 38 34 31 78 35 89 67 45 23 01 ef cd ab 34 01 7f 90 0e 0d 89 bc 07 a9 yasm-1.3.0/modules/objfmts/bin/tests/integer-warn.hex0000644000175000017500000000014411542263760017550 000000000000001a bc 75 ff ff 4a 13 bb 9a 98 78 56 34 12 f0 ee ad b8 af 34 01 7f 90 0e 0d yasm-1.3.0/modules/objfmts/bin/tests/shr.hex0000644000175000017500000000202011542263760015735 00000000000000b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 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 yasm-1.3.0/modules/objfmts/bin/tests/bin-farabs.asm0000644000175000017500000000211411542263760017145 00000000000000keybuf 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 yasm-1.3.0/modules/objfmts/bin/tests/integer.asm0000644000175000017500000000021611542263760016577 00000000000000; Tests integer constant handling (for output, not parsing) db 0x51 dw 0x3875 dd 0x35783134 dq 0xABCDEF0123456789 dt 0xa907bc890d0e907f0134 yasm-1.3.0/modules/objfmts/bin/tests/integer-warn.asm0000644000175000017500000000025711542263760017551 00000000000000; Tests warnings with integer constant handling (for output, not parsing) db 0x51a dw 0x3875bc dd 0x35783134affff dq 0xABCDEF012345678989abb dt 0xa907bc890d0e907f0134afb8adee yasm-1.3.0/modules/objfmts/bin/tests/reserve.errwarn0000644000175000017500000000044411542263760017520 00000000000000-: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 yasm-1.3.0/modules/objfmts/bin/tests/reserve.hex0000644000175000017500000000164411542263760016627 0000000000000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 yasm-1.3.0/modules/objfmts/bin/tests/multisect/0000775000175000017500000000000012372060146016527 500000000000000yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect5.map0000644000175000017500000000706411542263760021256 00000000000000 - 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 -------------------------------------------------------------------- yasm-1.3.0/modules/objfmts/bin/tests/multisect/bin-align.hex0000644000175000017500000000010411542263760021013 0000000000000001 8d 74 00 8d bd 00 00 00 00 00 00 00 00 00 00 00 yasm-1.3.0/modules/objfmts/bin/tests/multisect/nomultisect2.map0000644000175000017500000000270111542263760021601 00000000000000 - 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 -------------------------------------------------------------------- yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect1.map0000644000175000017500000000400511542263760021242 00000000000000 - 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 yasm-1.3.0/modules/objfmts/bin/tests/multisect/bin_multi_test.sh0000755000175000017500000000724011626275017022036 00000000000000#! /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 yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect4.asm0000644000175000017500000000125711542263760021256 00000000000000[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 yasm-1.3.0/modules/objfmts/bin/tests/multisect/follows-loop2-err.errwarn0000644000175000017500000000010111542263760023350 00000000000000-: error: follows loop between section `sect' and section `sect' yasm-1.3.0/modules/objfmts/bin/tests/multisect/nomultisect1.asm0000644000175000017500000000015111542263760021600 00000000000000[map all] [section .bss] resb 0x100 [section .data] times 0x100 db 1 [section .text] times 0x100 db 1 yasm-1.3.0/modules/objfmts/bin/tests/multisect/follows-loop1-err.asm0000644000175000017500000000007011542263760022454 00000000000000section sect1 follows=sect2 section sect2 follows=sect1 yasm-1.3.0/modules/objfmts/bin/tests/multisect/Makefile.inc0000644000175000017500000000637111626275017020672 00000000000000TESTS += 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 yasm-1.3.0/modules/objfmts/bin/tests/multisect/ldlinux-sects.asm0000644000175000017500000000403511542263760021754 00000000000000[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] yasm-1.3.0/modules/objfmts/bin/tests/multisect/bin-ssym.hex0000644000175000017500000000014411542263760020720 0000000000000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 be 10 00 bf 00 60 b9 09 00 yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect2.map0000644000175000017500000000362311542263760021250 00000000000000 - 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 yasm-1.3.0/modules/objfmts/bin/tests/multisect/follows-notfound-err.errwarn0000644000175000017500000000010411542263760024154 00000000000000-: error: section `foo' follows an invalid or unknown section `bar' yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect5.asm0000644000175000017500000000077111542263760021257 00000000000000org 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 yasm-1.3.0/modules/objfmts/bin/tests/multisect/vfollows-loop2-err.errwarn0000644000175000017500000000010211542263760023537 00000000000000-: error: vfollows loop between section `sect' and section `sect' yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect4.hex0000644000175000017500000000600011542263760021251 0000000000000003 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 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 yasm-1.3.0/modules/objfmts/bin/tests/multisect/initbss.hex0000644000175000017500000000000011542263760020621 00000000000000yasm-1.3.0/modules/objfmts/bin/tests/multisect/ldlinux-sects.map0000644000175000017500000000742011542263760021752 00000000000000 - 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 yasm-1.3.0/modules/objfmts/bin/tests/multisect/bin-ssym.map0000644000175000017500000000076211542263760020717 00000000000000 - 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 yasm-1.3.0/modules/objfmts/bin/tests/multisect/initbss.map0000644000175000017500000000106211542263760020623 00000000000000 - 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 yasm-1.3.0/modules/objfmts/bin/tests/multisect/bin-align.asm0000644000175000017500000000021511542263760021012 00000000000000[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 yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect3.map0000644000175000017500000000266611542263760021257 00000000000000 - 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 -------------------------------------------------------------------- yasm-1.3.0/modules/objfmts/bin/tests/multisect/vfollows-notfound-err.asm0000644000175000017500000000003211542263760023442 00000000000000section foo vfollows=bar yasm-1.3.0/modules/objfmts/bin/tests/multisect/vfollows-loop1-err.errwarn0000644000175000017500000000010411542263760023540 00000000000000-: error: vfollows loop between section `sect2' and section `sect1' yasm-1.3.0/modules/objfmts/bin/tests/multisect/bin-ssym.asm0000644000175000017500000000024311542263760020714 00000000000000section 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 yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect2.hex0000644000175000017500000000041011542263760021246 00000000000000b8 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 yasm-1.3.0/modules/objfmts/bin/tests/multisect/follows-notfound-err.asm0000644000175000017500000000003111542263760023253 00000000000000section foo follows=bar yasm-1.3.0/modules/objfmts/bin/tests/multisect/ldlinux-sects.hex0000644000175000017500000013061411542263760021763 0000000000000001 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 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 yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect3.hex0000644000175000017500000000001011542263760021243 0000000000000089 d8 yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect5.hex0000644000175000017500000001614011542263760021260 0000000000000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 yasm-1.3.0/modules/objfmts/bin/tests/multisect/vfollows-loop2-err.asm0000644000175000017500000000003311542263760022642 00000000000000section sect vfollows=sect yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect1.hex0000644000175000017500000000012011542263760021243 0000000000000066 bc 20 04 66 89 e3 b1 04 66 d3 eb b4 4a cd 21 00 00 00 00 yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect1.asm0000644000175000017500000000140611542263760021247 00000000000000[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: yasm-1.3.0/modules/objfmts/bin/tests/multisect/vfollows-notfound-err.errwarn0000644000175000017500000000010511542263760024343 00000000000000-: error: section `foo' vfollows an invalid or unknown section `bar' yasm-1.3.0/modules/objfmts/bin/tests/multisect/bin-align.map0000644000175000017500000000337111542263760021015 00000000000000 - 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 -------------------------------------------------------------------- yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect3.asm0000644000175000017500000000014511542263760021250 00000000000000[map all] section .text mov ax, bx section .foo nobits follows=.text resb 4 section .bss resb 4 yasm-1.3.0/modules/objfmts/bin/tests/multisect/nomultisect2.asm0000644000175000017500000000016411542263760021605 00000000000000org 0x100 [map all] [section .bss] resb 0x100 [section .data] times 0x100 db 1 [section .text] times 0x100 db 1 yasm-1.3.0/modules/objfmts/bin/tests/multisect/nomultisect2.hex0000644000175000017500000000400011542263760021602 0000000000000001 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 yasm-1.3.0/modules/objfmts/bin/tests/multisect/bin-align.errwarn0000644000175000017500000000034111542263760021712 00000000000000-: 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 yasm-1.3.0/modules/objfmts/bin/tests/multisect/nomultisect1.map0000644000175000017500000000270111542263760021600 00000000000000 - 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 -------------------------------------------------------------------- yasm-1.3.0/modules/objfmts/bin/tests/multisect/follows-loop2-err.asm0000644000175000017500000000003211542263760022453 00000000000000section sect follows=sect yasm-1.3.0/modules/objfmts/bin/tests/multisect/initbss.errwarn0000644000175000017500000000021211542263760021522 00000000000000-:2: warning: initialized space declared in nobits section: ignoring -:5: warning: initialized space declared in nobits section: ignoring yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect4.map0000644000175000017500000000475211542263760021256 00000000000000 - 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 yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect2.asm0000644000175000017500000000145011542263760021247 00000000000000org 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 ;-------------------------- yasm-1.3.0/modules/objfmts/bin/tests/multisect/follows-loop1-err.errwarn0000644000175000017500000000010311542263760023351 00000000000000-: error: follows loop between section `sect2' and section `sect1' yasm-1.3.0/modules/objfmts/bin/tests/multisect/nomultisect1.hex0000644000175000017500000000400011542263760021601 0000000000000001 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 yasm-1.3.0/modules/objfmts/bin/tests/multisect/initbss.asm0000644000175000017500000000006011542263760020623 00000000000000section .bss mov ax, 5 section foo nobits db 5 yasm-1.3.0/modules/objfmts/bin/tests/multisect/vfollows-loop1-err.asm0000644000175000017500000000007211542263760022644 00000000000000section sect1 vfollows=sect2 section sect2 vfollows=sect1 yasm-1.3.0/modules/objfmts/bin/tests/bigorg.errwarn0000644000175000017500000000014211542263760017311 00000000000000-:5: warning: value does not fit in 32 bit field -:6: warning: value does not fit in 32 bit field yasm-1.3.0/modules/objfmts/bin/tests/float-err.errwarn0000644000175000017500000000063611542263760017743 00000000000000-: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 yasm-1.3.0/modules/objfmts/bin/tests/integer-warn.errwarn0000644000175000017500000000036411542263760020450 00000000000000-: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 yasm-1.3.0/modules/objfmts/bin/tests/bintest.hex0000644000175000017500000000040411542263760016615 00000000000000eb 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 yasm-1.3.0/modules/objfmts/bin/tests/bin-rip.asm0000755000175000017500000000041611542263760016507 00000000000000bits 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 yasm-1.3.0/modules/objfmts/bin/tests/levelop.asm0000644000175000017500000000014411542263760016610 00000000000000test1: mov word [0x0010 + (test2 - test1)], 0x0000 mov word [0x0010 + test2 - test1], 0x0000 test2: yasm-1.3.0/modules/objfmts/bin/tests/float-err.asm0000644000175000017500000000055511542263760017043 00000000000000; 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 yasm-1.3.0/modules/objfmts/bin/bin-objfmt.c0000644000175000017500000017716311626275017015512 00000000000000/* * 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 }; yasm-1.3.0/modules/objfmts/bin/Makefile.inc0000644000175000017500000000030611626275017015507 00000000000000libyasm_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 yasm-1.3.0/modules/objfmts/bin/CMakeLists.txt0000644000175000017500000000007611542263760016042 00000000000000YASM_ADD_MODULE(objfmt_bin objfmts/bin/bin-objfmt.c ) yasm-1.3.0/modules/objfmts/macho/0000775000175000017500000000000012372060147013674 500000000000000yasm-1.3.0/modules/objfmts/macho/tests/0000775000175000017500000000000012372060145015034 500000000000000yasm-1.3.0/modules/objfmts/macho/tests/nasm32/0000775000175000017500000000000012372060147016141 500000000000000yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-pic.asm0000644000175000017500000000224411542263760020574 00000000000000; 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 yasm-1.3.0/modules/objfmts/macho/tests/nasm32/machotest.c0000644000175000017500000000225011542263760020215 00000000000000/* * 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); } yasm-1.3.0/modules/objfmts/macho/tests/nasm32/Makefile.inc0000664000175000017500000000201712333771162020274 00000000000000TESTS += 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 yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho-reloc.asm0000644000175000017500000000044511542263760020761 00000000000000[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-$ yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32_test.sh0000755000175000017500000000017711626275017020723 00000000000000#! /bin/sh ${srcdir}/out_test.sh macho_test modules/objfmts/macho/tests/nasm32 "32-bit macho objfmt" "-f macho32" ".o" exit $? yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-size.hex0000644000175000017500000000244011542263760020775 00000000000000ce 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 yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-sect.asm0000644000175000017500000000034711542263760020761 00000000000000section .data section __x section __y segname=__Y section __Z, __z section __Y __bar section __reallylongname12345 section __REALLYLONGSEGNAME __1 section __2 __reallylongsectname section __2REALLYLONGSEGNAME __2reallylongsectname yasm-1.3.0/modules/objfmts/macho/tests/nasm32/machotest.asm0000644000175000017500000000423011542263760020553 00000000000000; 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] yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho-reloc.hex0000644000175000017500000000304411542263760020763 00000000000000ce 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 yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-size.asm0000644000175000017500000000224711542263760020776 00000000000000 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 yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-sect.errwarn0000644000175000017500000000070711542263760021661 00000000000000-: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 yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-pext.hex0000664000175000017500000000145012333771162021004 00000000000000ce 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 yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-pext.asm0000664000175000017500000000006112333771162020775 00000000000000[GLOBAL function:private_extern] function: ret yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-pic.hex0000644000175000017500000000251011542263760020574 00000000000000ce 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 yasm-1.3.0/modules/objfmts/macho/tests/nasm32/machotest.hex0000644000175000017500000000532011542263760020560 00000000000000ce 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 yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-sect.hex0000644000175000017500000000612411542263760020764 00000000000000ce 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 yasm-1.3.0/modules/objfmts/macho/tests/gas64/0000775000175000017500000000000012372060147015762 500000000000000yasm-1.3.0/modules/objfmts/macho/tests/gas64/gas_macho64_test.sh0000755000175000017500000000021111626275017021370 00000000000000#! /bin/sh ${srcdir}/out_test.sh macho_test modules/objfmts/macho/tests/gas64 "GAS 64-bit macho objfmt" "-f macho64 -p gas" ".o" exit $? yasm-1.3.0/modules/objfmts/macho/tests/gas64/Makefile.inc0000644000175000017500000000061411626275017020116 00000000000000TESTS += 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 yasm-1.3.0/modules/objfmts/macho/tests/gas64/gas-macho64-pic.hex0000644000175000017500000000255011542263760021176 00000000000000cf 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 yasm-1.3.0/modules/objfmts/macho/tests/gas64/gas-macho64.hex0000644000175000017500000000515011542263760020424 00000000000000cf 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 yasm-1.3.0/modules/objfmts/macho/tests/gas64/gas-macho64.asm0000644000175000017500000000706011542263760020422 00000000000000 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: yasm-1.3.0/modules/objfmts/macho/tests/gas64/gas-macho64-pic.asm0000644000175000017500000000177411542263760021201 00000000000000call _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 yasm-1.3.0/modules/objfmts/macho/tests/Makefile.inc0000644000175000017500000000072511626275017017175 00000000000000EXTRA_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 yasm-1.3.0/modules/objfmts/macho/tests/nasm64/0000775000175000017500000000000012372060147016146 500000000000000yasm-1.3.0/modules/objfmts/macho/tests/nasm64/nasm-macho64-pic.hex0000644000175000017500000000255011542263760021546 00000000000000cf 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 yasm-1.3.0/modules/objfmts/macho/tests/nasm64/Makefile.inc0000644000175000017500000000113511626275017020301 00000000000000TESTS += 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 yasm-1.3.0/modules/objfmts/macho/tests/nasm64/machotest64.hex0000644000175000017500000001021011542263760020731 00000000000000cf 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 yasm-1.3.0/modules/objfmts/macho/tests/nasm64/machotest64.asm0000644000175000017500000000473711542263760020746 00000000000000; 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] yasm-1.3.0/modules/objfmts/macho/tests/nasm64/macho64_test.sh0000755000175000017500000000017711626275017020735 00000000000000#! /bin/sh ${srcdir}/out_test.sh macho_test modules/objfmts/macho/tests/nasm64 "64-bit macho objfmt" "-f macho64" ".o" exit $? yasm-1.3.0/modules/objfmts/macho/tests/nasm64/macho-reloc64-err.asm0000644000175000017500000000061511542263760021725 00000000000000[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-$ yasm-1.3.0/modules/objfmts/macho/tests/nasm64/machotest64.c0000644000175000017500000000322111542263760020373 00000000000000/* * 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); } yasm-1.3.0/modules/objfmts/macho/tests/nasm64/macho-reloc64-err.errwarn0000644000175000017500000000224311542263760022624 00000000000000-: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 yasm-1.3.0/modules/objfmts/macho/tests/nasm64/nasm-macho64-pic.asm0000644000175000017500000000203211542263760021535 00000000000000[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 yasm-1.3.0/modules/objfmts/macho/tests/gas32/0000775000175000017500000000000012372060147015755 500000000000000yasm-1.3.0/modules/objfmts/macho/tests/gas32/gas_macho32_test.sh0000755000175000017500000000021111626275017021356 00000000000000#! /bin/sh ${srcdir}/out_test.sh macho_test modules/objfmts/macho/tests/gas32 "GAS 32-bit macho objfmt" "-f macho32 -p gas" ".o" exit $? yasm-1.3.0/modules/objfmts/macho/tests/gas32/Makefile.inc0000644000175000017500000000040411626275017020106 00000000000000TESTS += 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 yasm-1.3.0/modules/objfmts/macho/tests/gas32/gas-macho32.asm0000644000175000017500000000406311542263760020410 00000000000000# 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] yasm-1.3.0/modules/objfmts/macho/tests/gas32/gas-macho32.hex0000644000175000017500000000530011542263760020407 00000000000000ce 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 yasm-1.3.0/modules/objfmts/macho/Makefile.inc0000644000175000017500000000034011626275017016024 00000000000000libyasm_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 yasm-1.3.0/modules/objfmts/macho/CMakeLists.txt0000644000175000017500000000022611542263760016356 00000000000000YASM_ADD_MODULE(objfmt_macho objfmts/macho/macho-objfmt.c ) list(APPEND YASM_MODULES objfmt_macho32) list(APPEND YASM_MODULES objfmt_macho64) yasm-1.3.0/modules/objfmts/macho/macho-objfmt.c0000664000175000017500000016407012371736130016337 00000000000000/* * 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 }; yasm-1.3.0/modules/objfmts/win32/0000775000175000017500000000000012372060145013545 500000000000000yasm-1.3.0/modules/objfmts/win32/tests/0000775000175000017500000000000012372060147014711 500000000000000yasm-1.3.0/modules/objfmts/win32/tests/win32test.c0000644000175000017500000000162211542263760016642 00000000000000/* * 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); } yasm-1.3.0/modules/objfmts/win32/tests/win32-curpos.asm0000644000175000017500000000066111542263760017613 00000000000000global 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 yasm-1.3.0/modules/objfmts/win32/tests/win32-safeseh.hex0000644000175000017500000000224011542263760017715 000000000000004c 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 yasm-1.3.0/modules/objfmts/win32/tests/win32-overdef.hex0000644000175000017500000000115011542263760017730 000000000000004c 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 yasm-1.3.0/modules/objfmts/win32/tests/Makefile.inc0000644000175000017500000000200511626275017017041 00000000000000TESTS += 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 yasm-1.3.0/modules/objfmts/win32/tests/export.asm0000644000175000017500000000005611542263760016657 00000000000000export foo export foo2 global foo2 foo: foo2: yasm-1.3.0/modules/objfmts/win32/tests/win32-segof.asm0000644000175000017500000000013711542263760017401 00000000000000extern value mov ax, seg value mov ds, ax mov ax, seg local mov es, ax section .data local: yasm-1.3.0/modules/objfmts/win32/tests/win32-segof.hex0000644000175000017500000000214011542263760017401 000000000000004c 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 yasm-1.3.0/modules/objfmts/win32/tests/win32-safeseh.asm0000644000175000017500000000010711542263760017711 00000000000000MyHandler: ret safeseh MyHandler extern MyHandler3 safeseh MyHandler3 yasm-1.3.0/modules/objfmts/win32/tests/win32test.hex0000644000175000017500000000521411542263760017205 000000000000004c 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 yasm-1.3.0/modules/objfmts/win32/tests/win32-curpos.hex0000644000175000017500000000371011542263760017615 000000000000004c 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 yasm-1.3.0/modules/objfmts/win32/tests/win32test.asm0000644000175000017500000000411011542263760017173 00000000000000; 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] yasm-1.3.0/modules/objfmts/win32/tests/win32_test.sh0000755000175000017500000000016111626275017017172 00000000000000#! /bin/sh ${srcdir}/out_test.sh win32_test modules/objfmts/win32/tests "win32 objfmt" "-f win32" ".obj" exit $? yasm-1.3.0/modules/objfmts/win32/tests/export.hex0000644000175000017500000000210411542263760016657 000000000000004c 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 yasm-1.3.0/modules/objfmts/win32/tests/win32-safeseh.masm0000644000175000017500000000023011542263760020063 00000000000000.386 .model flat _TEXT SEGMENT USE32 PUBLIC 'CODE' MyHandler proc .safeseh MyHandler MyHandler endp _TEXT ENDS MyHandler3 proto .safeseh MyHandler3 end yasm-1.3.0/modules/objfmts/win32/tests/gas/0000775000175000017500000000000012372060147015463 500000000000000yasm-1.3.0/modules/objfmts/win32/tests/gas/win32def.hex0000644000175000017500000000126011542263760017533 000000000000004c 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 yasm-1.3.0/modules/objfmts/win32/tests/gas/Makefile.inc0000644000175000017500000000074611626275017017625 00000000000000TESTS += 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 yasm-1.3.0/modules/objfmts/win32/tests/gas/win32at.asm0000644000175000017500000000446611542263760017410 00000000000000.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)" yasm-1.3.0/modules/objfmts/win32/tests/gas/win32def.asm0000644000175000017500000000006711542263760017533 00000000000000.globl label label: .def label .scl 2 .type 32 .endef yasm-1.3.0/modules/objfmts/win32/tests/gas/win32secrel32.asm0000644000175000017500000000225511542263760020420 00000000000000# [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 yasm-1.3.0/modules/objfmts/win32/tests/gas/win32_gas_test.sh0000755000175000017500000000020011626275017020570 00000000000000#! /bin/sh ${srcdir}/out_test.sh win32_gas_test modules/objfmts/win32/tests/gas "win32 objfmt" "-f win32 -p gas" ".obj" exit $? yasm-1.3.0/modules/objfmts/win32/tests/gas/win32secrel32.hex0000644000175000017500000000605011542263760020421 000000000000004c 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 yasm-1.3.0/modules/objfmts/win32/tests/gas/win32at.hex0000644000175000017500000001472411542263760017412 000000000000004c 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 yasm-1.3.0/modules/objfmts/win32/tests/win32-overdef.asm0000644000175000017500000000003011542263760017720 00000000000000section .text align=64 yasm-1.3.0/modules/objfmts/win32/Makefile.inc0000644000175000017500000000025111626275017015700 00000000000000# Assume objfmt_coff is included YASM_MODULES += objfmt_win32 EXTRA_DIST += modules/objfmts/win32/tests/Makefile.inc include modules/objfmts/win32/tests/Makefile.inc yasm-1.3.0/modules/objfmts/elf/0000775000175000017500000000000012372060147013353 500000000000000yasm-1.3.0/modules/objfmts/elf/elf.h0000644000175000017500000005634511626275017014232 00000000000000/* * 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 */ yasm-1.3.0/modules/objfmts/elf/tests/0000775000175000017500000000000012372060146014514 500000000000000yasm-1.3.0/modules/objfmts/elf/tests/amd64/0000775000175000017500000000000012372060146015427 500000000000000yasm-1.3.0/modules/objfmts/elf/tests/amd64/elf-rip.asm0000644000175000017500000000015211542263760017410 00000000000000[bits 64] [extern sym] mov eax, [rip] mov eax, [rip+2] mov eax, [rip+sym] mov eax, [sym wrt rip] call sym yasm-1.3.0/modules/objfmts/elf/tests/amd64/Makefile.inc0000644000175000017500000000113211626275017017560 00000000000000TESTS += 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 yasm-1.3.0/modules/objfmts/elf/tests/amd64/elfso64.asm0000644000175000017500000000502211542263760017335 00000000000000; 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] yasm-1.3.0/modules/objfmts/elf/tests/amd64/elf_amd64_test.sh0000755000175000017500000000020211626275017020504 00000000000000#! /bin/sh ${srcdir}/out_test.sh elf_amd64_test modules/objfmts/elf/tests/amd64 "elf-amd64 objfmt" "-m amd64 -f elf" ".o" exit $? yasm-1.3.0/modules/objfmts/elf/tests/amd64/gotpcrel.hex0000644000175000017500000000550011542263760017677 000000000000007f 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 yasm-1.3.0/modules/objfmts/elf/tests/amd64/elf-rip.hex0000644000175000017500000000540011542263760017415 000000000000007f 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 yasm-1.3.0/modules/objfmts/elf/tests/amd64/multiplefixup.asm0000644000175000017500000000017711623775055020775 00000000000000[section .data] foobar: dq 42 [section .text] foo: times 4 mov rax, [rel foobar] times 4 mov rax, [foobar] times 4 jmp foo yasm-1.3.0/modules/objfmts/elf/tests/amd64/multiplefixup.hex0000644000175000017500000000760011623775055020777 000000000000007f 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 yasm-1.3.0/modules/objfmts/elf/tests/amd64/gotpcrel.asm0000644000175000017500000000027311542263760017675 00000000000000var: 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] yasm-1.3.0/modules/objfmts/elf/tests/amd64/elfso64.hex0000644000175000017500000001510011542263760017337 000000000000007f 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 yasm-1.3.0/modules/objfmts/elf/tests/nasm-sectname.hex0000644000175000017500000000374011542263760017704 000000000000007f 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 yasm-1.3.0/modules/objfmts/elf/tests/elfglobal.asm0000644000175000017500000000034111542263760017066 00000000000000; 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 yasm-1.3.0/modules/objfmts/elf/tests/elfmanysym.hex0000644000175000017500000004270011542263760017334 000000000000007f 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 yasm-1.3.0/modules/objfmts/elf/tests/elftest.hex0000644000175000017500000001004011542263760016606 000000000000007f 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 yasm-1.3.0/modules/objfmts/elf/tests/gas64/0000775000175000017500000000000012372060146015440 500000000000000yasm-1.3.0/modules/objfmts/elf/tests/gas64/elf_gas64_test.sh0000755000175000017500000000020611626275017020532 00000000000000#! /bin/sh ${srcdir}/out_test.sh elf_gas64_test modules/objfmts/elf/tests/gas64 "GAS elf-amd64 objfmt" "-f elf64 -p gas" ".o" exit $? yasm-1.3.0/modules/objfmts/elf/tests/gas64/elf_gas64_ssym.asm0000644000175000017500000000026611542263760020716 00000000000000.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 yasm-1.3.0/modules/objfmts/elf/tests/gas64/elf_gas64_curpos.asm0000644000175000017500000000077311542263760021241 00000000000000.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 yasm-1.3.0/modules/objfmts/elf/tests/gas64/Makefile.inc0000644000175000017500000000120011626275017017565 00000000000000TESTS += 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 yasm-1.3.0/modules/objfmts/elf/tests/gas64/elf_gas64_ssym.hex0000644000175000017500000000670011542263760020721 000000000000007f 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 yasm-1.3.0/modules/objfmts/elf/tests/gas64/crosssect.asm0000644000175000017500000000047711542263760020105 00000000000000.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 yasm-1.3.0/modules/objfmts/elf/tests/gas64/elf_gas64_curpos.hex0000644000175000017500000001160011542263760021234 000000000000007f 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 yasm-1.3.0/modules/objfmts/elf/tests/gas64/crosssect.hex0000644000175000017500000000640011542263760020101 000000000000007f 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 yasm-1.3.0/modules/objfmts/elf/tests/gas64/elf_gas64_reloc.hex0000644000175000017500000001270011542263760021027 000000000000007f 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 yasm-1.3.0/modules/objfmts/elf/tests/gas64/elf_gas64_reloc.asm0000644000175000017500000000077011542263760021027 00000000000000.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 yasm-1.3.0/modules/objfmts/elf/tests/elftypesize.asm0000644000175000017500000000033711542263760017507 00000000000000weak 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: yasm-1.3.0/modules/objfmts/elf/tests/elfglobext.asm0000644000175000017500000000034411542263760017275 00000000000000[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 yasm-1.3.0/modules/objfmts/elf/tests/nasm-forceident.asm0000644000175000017500000000012611542263760020216 00000000000000section ".text" section '.text' section $foo global $Test $Test: mov ax, 0 ret yasm-1.3.0/modules/objfmts/elf/tests/nasm-forceident.hex0000644000175000017500000000340011542263760020220 000000000000007f 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 yasm-1.3.0/modules/objfmts/elf/tests/elfabssect.hex0000644000175000017500000000324011542263760017257 000000000000007f 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 yasm-1.3.0/modules/objfmts/elf/tests/elfreloc-ext.hex0000644000175000017500000000350011542263760017534 000000000000007f 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 yasm-1.3.0/modules/objfmts/elf/tests/curpos-err.errwarn0000644000175000017500000000012211542263760020135 00000000000000-:15: error: data expression too complex -:21: error: data expression too complex yasm-1.3.0/modules/objfmts/elf/tests/elftest.asm0000644000175000017500000000414111542263760016607 00000000000000; 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] yasm-1.3.0/modules/objfmts/elf/tests/Makefile.inc0000664000175000017500000000600612333771162016652 00000000000000TESTS += 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 yasm-1.3.0/modules/objfmts/elf/tests/elftimes.hex0000644000175000017500000000510011542263760016751 000000000000007f 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 yasm-1.3.0/modules/objfmts/elf/tests/elfsectalign.hex0000644000175000017500000000364011542263760017610 000000000000007f 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 yasm-1.3.0/modules/objfmts/elf/tests/elfso.hex0000644000175000017500000001074011542263760016257 000000000000007f 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 yasm-1.3.0/modules/objfmts/elf/tests/elfreloc-ext.asm0000644000175000017500000000010711542263760017530 00000000000000EXTERN variable mov eax, variable mov ax, variable mov al, variable yasm-1.3.0/modules/objfmts/elf/tests/elfequabs.asm0000644000175000017500000000014711542263760017112 00000000000000global label absolute 5000h label: section .text global absval absval equ 1000h jmp absval jmp label yasm-1.3.0/modules/objfmts/elf/tests/elfglobext.hex0000644000175000017500000000420011542263760017274 000000000000007f 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 yasm-1.3.0/modules/objfmts/elf/tests/elfvisibility.asm0000644000175000017500000000026011542263760020015 00000000000000[section .text] [global ghidden:hidden] [global ginternal:internal] [global gprotected:protected] [global gtoomany:hidden internal] ghidden: ginternal: gprotected: gtoomany: yasm-1.3.0/modules/objfmts/elf/tests/elfmanysym.asm0000755000175000017500000001364011542263760017334 00000000000000struc 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: yasm-1.3.0/modules/objfmts/elf/tests/elfso.asm0000644000175000017500000000512611542263760016255 00000000000000; 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] yasm-1.3.0/modules/objfmts/elf/tests/elfreloc.asm0000644000175000017500000000013211542263760016730 00000000000000EXTERN constant EXTERN function GLOBAL main main: mov eax, constant call function ret yasm-1.3.0/modules/objfmts/elf/tests/elfvisibility.hex0000644000175000017500000000344011542263760020024 000000000000007f 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 yasm-1.3.0/modules/objfmts/elf/tests/elf-overdef.asm0000644000175000017500000000003011542263760017330 00000000000000section .text align=64 yasm-1.3.0/modules/objfmts/elf/tests/elftimes.asm0000644000175000017500000000032111542263760016745 00000000000000[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 yasm-1.3.0/modules/objfmts/elf/tests/curpos.asm0000644000175000017500000000066111542263760016457 00000000000000global 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 yasm-1.3.0/modules/objfmts/elf/tests/elfglobal.hex0000644000175000017500000000314011542263760017072 000000000000007f 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 yasm-1.3.0/modules/objfmts/elf/tests/elftest.c0000644000175000017500000000166511542263760016261 00000000000000/* * 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); } yasm-1.3.0/modules/objfmts/elf/tests/elf-overdef.hex0000644000175000017500000000264011542263760017345 000000000000007f 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 yasm-1.3.0/modules/objfmts/elf/tests/elf-x86id.asm0000644000175000017500000113131111542263760016650 00000000000000; 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" yasm-1.3.0/modules/objfmts/elf/tests/elfreloc.hex0000644000175000017500000000400011542263760016732 000000000000007f 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 yasm-1.3.0/modules/objfmts/elf/tests/elfcond.asm0000644000175000017500000000007311542263760016553 00000000000000%ifidn __YASM_OBJFMT__,elf SECTION .booga progbits %endif yasm-1.3.0/modules/objfmts/elf/tests/elfsectalign.asm0000644000175000017500000000006411542263760017601 00000000000000[section .data align=64] [section .rodata align=32] yasm-1.3.0/modules/objfmts/elf/tests/x32/0000775000175000017500000000000012372060146015130 500000000000000yasm-1.3.0/modules/objfmts/elf/tests/x32/elfsox32.asm0000664000175000017500000000502212333771162017222 00000000000000; 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] yasm-1.3.0/modules/objfmts/elf/tests/x32/elf-rip.asm0000664000175000017500000000015212333771162017112 00000000000000[bits 64] [extern sym] mov eax, [rip] mov eax, [rip+2] mov eax, [rip+sym] mov eax, [sym wrt rip] call sym yasm-1.3.0/modules/objfmts/elf/tests/x32/Makefile.inc0000664000175000017500000000110412333771162017260 00000000000000TESTS += 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 yasm-1.3.0/modules/objfmts/elf/tests/x32/gotpcrel.hex0000664000175000017500000000370012333771162017401 000000000000007f 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 yasm-1.3.0/modules/objfmts/elf/tests/x32/elf-rip.hex0000664000175000017500000000370012333771162017120 000000000000007f 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 yasm-1.3.0/modules/objfmts/elf/tests/x32/multiplefixup.asm0000664000175000017500000000017712333771162020472 00000000000000[section .data] foobar: dq 42 [section .text] foo: times 4 mov rax, [rel foobar] times 4 mov rax, [foobar] times 4 jmp foo yasm-1.3.0/modules/objfmts/elf/tests/x32/multiplefixup.hex0000664000175000017500000000524012333771162020472 000000000000007f 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 yasm-1.3.0/modules/objfmts/elf/tests/x32/elf_x32_test.sh0000775000175000017500000000017212333771162017714 00000000000000#! /bin/sh ${srcdir}/out_test.sh elf_x32_test modules/objfmts/elf/tests/x32 "elf-x32 objfmt" "-f elf -m x32" ".o" exit $? yasm-1.3.0/modules/objfmts/elf/tests/x32/gotpcrel.asm0000664000175000017500000000027312333771162017377 00000000000000var: 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] yasm-1.3.0/modules/objfmts/elf/tests/x32/elfsox32.hex0000664000175000017500000001114012333771162017224 000000000000007f 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 yasm-1.3.0/modules/objfmts/elf/tests/elfequabs.hex0000644000175000017500000000370011542263760017114 000000000000007f 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 yasm-1.3.0/modules/objfmts/elf/tests/nasm-sectname.asm0000644000175000017500000000016511542263760017676 00000000000000; XXX: this test should really be in parsers/nasm/tests, not here. section .note.GNU-stack section "more$$&complex" yasm-1.3.0/modules/objfmts/elf/tests/gasx32/0000775000175000017500000000000012372060146015623 500000000000000yasm-1.3.0/modules/objfmts/elf/tests/gasx32/Makefile.inc0000664000175000017500000000122212333771162017754 00000000000000TESTS += 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 yasm-1.3.0/modules/objfmts/elf/tests/gasx32/elf_gasx32_ssym.asm0000664000175000017500000000026612333771162021265 00000000000000.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 yasm-1.3.0/modules/objfmts/elf/tests/gasx32/elf_gasx32_reloc.asm0000664000175000017500000000077012333771162021376 00000000000000.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 yasm-1.3.0/modules/objfmts/elf/tests/gasx32/crosssect.asm0000664000175000017500000000047712333771162020271 00000000000000.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 yasm-1.3.0/modules/objfmts/elf/tests/gasx32/elf_gasx32_curpos.asm0000664000175000017500000000077312333771162021610 00000000000000.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 yasm-1.3.0/modules/objfmts/elf/tests/gasx32/crosssect.hex0000664000175000017500000000434012333771162020266 000000000000007f 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 yasm-1.3.0/modules/objfmts/elf/tests/gasx32/elf_gasx32_curpos.hex0000664000175000017500000000650012333771162021606 000000000000007f 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 yasm-1.3.0/modules/objfmts/elf/tests/gasx32/elf_gasx32_ssym.hex0000664000175000017500000000450012333771162021264 000000000000007f 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 yasm-1.3.0/modules/objfmts/elf/tests/gasx32/elf_gasx32_test.sh0000775000175000017500000000020712333771162021101 00000000000000#! /bin/sh ${srcdir}/out_test.sh elf_gasx32_test modules/objfmts/elf/tests/gasx32 "GAS elf-x32 objfmt" "-f elfx32 -p gas" ".o" exit $? yasm-1.3.0/modules/objfmts/elf/tests/gasx32/elf_gasx32_reloc.hex0000664000175000017500000000774012333771162021406 000000000000007f 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 yasm-1.3.0/modules/objfmts/elf/tests/elftypesize.hex0000644000175000017500000000424011542263760017510 000000000000007f 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 yasm-1.3.0/modules/objfmts/elf/tests/elfabssect.asm0000644000175000017500000000036211542263760017255 00000000000000%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 yasm-1.3.0/modules/objfmts/elf/tests/curpos-err.asm0000644000175000017500000000065711542263760017252 00000000000000global 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 yasm-1.3.0/modules/objfmts/elf/tests/elfglobext2.asm0000644000175000017500000000002611542263760017354 00000000000000global foo extern foo yasm-1.3.0/modules/objfmts/elf/tests/elfvisibility.errwarn0000644000175000017500000000010311542263760020711 00000000000000-:6: warning: More than one symbol visibility provided; using last yasm-1.3.0/modules/objfmts/elf/tests/curpos.hex0000644000175000017500000000640011542263760016460 000000000000007f 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 yasm-1.3.0/modules/objfmts/elf/tests/elf-x86id.hex0000644000175000017500000216304011542263760016661 000000000000007f 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 yasm-1.3.0/modules/objfmts/elf/tests/gas32/0000775000175000017500000000000012372060146015433 500000000000000yasm-1.3.0/modules/objfmts/elf/tests/gas32/Makefile.inc0000644000175000017500000000057611626275017017577 00000000000000TESTS += 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 yasm-1.3.0/modules/objfmts/elf/tests/gas32/elf_gas32_got.hex0000644000175000017500000000420011542263760020476 000000000000007f 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 yasm-1.3.0/modules/objfmts/elf/tests/gas32/elf_gas32_ssym.hex0000644000175000017500000000450011542263760020703 000000000000007f 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 yasm-1.3.0/modules/objfmts/elf/tests/gas32/elf_gas32_test.sh0000755000175000017500000000020411626275017020516 00000000000000#! /bin/sh ${srcdir}/out_test.sh elf_gas32_test modules/objfmts/elf/tests/gas32 "GAS elf-x86 objfmt" "-f elf32 -p gas" ".o" exit $? yasm-1.3.0/modules/objfmts/elf/tests/gas32/elf_gas32_got.asm0000644000175000017500000000023511542263760020476 00000000000000.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 yasm-1.3.0/modules/objfmts/elf/tests/gas32/elf_gas32_ssym.asm0000644000175000017500000000042311542263760020677 00000000000000.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 yasm-1.3.0/modules/objfmts/elf/tests/elfcond.hex0000644000175000017500000000320011542263760016552 000000000000007f 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 yasm-1.3.0/modules/objfmts/elf/tests/elfglobext2.hex0000644000175000017500000000274011542263760017365 000000000000007f 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 yasm-1.3.0/modules/objfmts/elf/tests/elf_test.sh0000755000175000017500000000026111626275017016603 00000000000000#! /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 $? yasm-1.3.0/modules/objfmts/elf/Makefile.inc0000664000175000017500000000103412333771162015504 00000000000000libyasm_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 yasm-1.3.0/modules/objfmts/elf/CMakeLists.txt0000664000175000017500000000044612333771162016042 00000000000000YASM_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) yasm-1.3.0/modules/objfmts/elf/elf-machine.h0000644000175000017500000001106311626275017015620 00000000000000/* * 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 */ yasm-1.3.0/modules/objfmts/elf/elf-objfmt.c0000664000175000017500000013542012333771162015474 00000000000000/* * 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 }; yasm-1.3.0/modules/objfmts/elf/elf-x86-x32.c0000664000175000017500000002315612333771162015254 00000000000000/* * 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 }; yasm-1.3.0/modules/objfmts/elf/elf-x86-amd64.c0000644000175000017500000002414011626275017015545 00000000000000/* * 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 }; yasm-1.3.0/modules/objfmts/elf/elf-x86-x86.c0000644000175000017500000002270211626275017015261 00000000000000/* * 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 }; yasm-1.3.0/modules/objfmts/elf/elf.c0000664000175000017500000006600212371736130014212 00000000000000/* * 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; } yasm-1.3.0/modules/objfmts/rdf/0000775000175000017500000000000012372060147013360 500000000000000yasm-1.3.0/modules/objfmts/rdf/tests/0000775000175000017500000000000012372060147014522 500000000000000yasm-1.3.0/modules/objfmts/rdf/tests/rdtmain.asm0000644000175000017500000000215411542263760016606 00000000000000 ;; 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 yasm-1.3.0/modules/objfmts/rdf/tests/rdtlib.asm0000644000175000017500000000107411542263760016430 00000000000000 ;; 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',0yasm-1.3.0/modules/objfmts/rdf/tests/rdftest2.hex0000644000175000017500000000176011542263760016713 0000000000000052 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 yasm-1.3.0/modules/objfmts/rdf/tests/rdfseg2.asm0000644000175000017500000000040611542263760016502 00000000000000 ;; 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 yasm-1.3.0/modules/objfmts/rdf/tests/rdtlib.hex0000644000175000017500000000100011542263760016421 0000000000000052 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 yasm-1.3.0/modules/objfmts/rdf/tests/Makefile.inc0000644000175000017500000000210011626275017016646 00000000000000TESTS += 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 yasm-1.3.0/modules/objfmts/rdf/tests/rdfabs.hex0000644000175000017500000000014011542263760016406 0000000000000052 44 4f 46 46 32 0e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 yasm-1.3.0/modules/objfmts/rdf/tests/rdfabs.errwarn0000644000175000017500000000020211542263760017301 00000000000000-:6: warning: rdf does not support exporting EQU/absolute values -:7: warning: rdf does not support exporting EQU/absolute values yasm-1.3.0/modules/objfmts/rdf/tests/rdftest1.asm0000644000175000017500000000247211542263760016707 00000000000000 ;; 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 yasm-1.3.0/modules/objfmts/rdf/tests/testlib.hex0000644000175000017500000000100011542263760016607 0000000000000052 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 yasm-1.3.0/modules/objfmts/rdf/tests/testlib.asm0000644000175000017500000000052711542263760016620 00000000000000; 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! yasm-1.3.0/modules/objfmts/rdf/tests/rdftest2.asm0000644000175000017500000000122311542263760016701 00000000000000 ;; 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 yasm-1.3.0/modules/objfmts/rdf/tests/rdfseg.hex0000644000175000017500000000106411542263760016425 0000000000000052 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 yasm-1.3.0/modules/objfmts/rdf/tests/rdfseg2.hex0000644000175000017500000000030411542263760016503 0000000000000052 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 yasm-1.3.0/modules/objfmts/rdf/tests/rdfseg.asm0000644000175000017500000000064411542263760016424 00000000000000 ;; 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 yasm-1.3.0/modules/objfmts/rdf/tests/rdfext.hex0000644000175000017500000000337411542263760016455 0000000000000052 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 yasm-1.3.0/modules/objfmts/rdf/tests/rdtmain.hex0000644000175000017500000000103011542263760016602 0000000000000052 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 yasm-1.3.0/modules/objfmts/rdf/tests/rdftest1.hex0000644000175000017500000000226411542263760016712 0000000000000052 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 yasm-1.3.0/modules/objfmts/rdf/tests/rdf_test.sh0000755000175000017500000000015111626275017016613 00000000000000#! /bin/sh ${srcdir}/out_test.sh rdf_test modules/objfmts/rdf/tests "rdf objfmt" "-f rdf" ".rdf" exit $? yasm-1.3.0/modules/objfmts/rdf/tests/rdfext.asm0000644000175000017500000000131111542263760016436 00000000000000module 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 yasm-1.3.0/modules/objfmts/rdf/tests/rdfabs.asm0000644000175000017500000000010511542263760016403 00000000000000absolute 0x5000 label label2 equ 0x9999 global label global label2 yasm-1.3.0/modules/objfmts/rdf/Makefile.inc0000644000175000017500000000027011626275017015512 00000000000000libyasm_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 yasm-1.3.0/modules/objfmts/rdf/CMakeLists.txt0000644000175000017500000000007611542263760016045 00000000000000YASM_ADD_MODULE(objfmt_rdf objfmts/rdf/rdf-objfmt.c ) yasm-1.3.0/modules/objfmts/rdf/rdf-objfmt.c0000664000175000017500000010562312371736130015506 00000000000000/* * 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 }; yasm-1.3.0/modules/objfmts/coff/0000775000175000017500000000000012372060147013522 500000000000000yasm-1.3.0/modules/objfmts/coff/win64-nasm.mac0000644000175000017500000000304411542263760016032 00000000000000%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 yasm-1.3.0/modules/objfmts/coff/tests/0000775000175000017500000000000012372060146014663 500000000000000yasm-1.3.0/modules/objfmts/coff/tests/Makefile.inc0000644000175000017500000000102311626275017017013 00000000000000TESTS += 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 yasm-1.3.0/modules/objfmts/coff/tests/cofftest.hex0000644000175000017500000000510411542263760017131 000000000000004c 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 yasm-1.3.0/modules/objfmts/coff/tests/cofftimes.hex0000644000175000017500000000353011542263760017274 000000000000004c 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 yasm-1.3.0/modules/objfmts/coff/tests/x86id.asm0000644000175000017500000113017511542263760016262 00000000000000; 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" yasm-1.3.0/modules/objfmts/coff/tests/cofftest.c0000644000175000017500000000162211542263760016570 00000000000000/* * 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); } yasm-1.3.0/modules/objfmts/coff/tests/cofftest.asm0000644000175000017500000000411011542263760017121 00000000000000; 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] yasm-1.3.0/modules/objfmts/coff/tests/coff_test.sh0000755000175000017500000000015311626275017017121 00000000000000#! /bin/sh ${srcdir}/out_test.sh coff_test modules/objfmts/coff/tests "coff objfmt" "-f coff" ".o" exit $? yasm-1.3.0/modules/objfmts/coff/tests/x86id.hex0000644000175000017500000147415011542263760016272 000000000000004c 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 yasm-1.3.0/modules/objfmts/coff/tests/x86id.errwarn0000644000175000017500000000616311542263760017160 00000000000000-: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 yasm-1.3.0/modules/objfmts/coff/tests/cofftimes.asm0000644000175000017500000000032111542263760017263 00000000000000[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 yasm-1.3.0/modules/objfmts/coff/Makefile.inc0000644000175000017500000000166511626275017015665 00000000000000libyasm_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 yasm-1.3.0/modules/objfmts/coff/coff-objfmt.h0000644000175000017500000000610311626275017016012 00000000000000/* * 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 yasm-1.3.0/modules/objfmts/coff/win64-except.c0000644000175000017500000004564011626275017016057 00000000000000/* * 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; } yasm-1.3.0/modules/objfmts/coff/CMakeLists.txt0000644000175000017500000000125711542263760016211 00000000000000YASM_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) yasm-1.3.0/modules/objfmts/coff/coff-objfmt.c0000664000175000017500000026355312371736130016021 00000000000000/* * 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 }; yasm-1.3.0/modules/objfmts/coff/win64-gas.mac0000644000175000017500000000174711542263760015656 00000000000000%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 yasm-1.3.0/modules/objfmts/yasm_objfmts.xml0000664000175000017500000001163012333771162015750 00000000000000 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
yasm-1.3.0/modules/CMakeLists.txt0000664000175000017500000000734612372051662013635 00000000000000INCLUDE_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) yasm-1.3.0/modules/parsers/0000775000175000017500000000000012372060147012620 500000000000000yasm-1.3.0/modules/parsers/Makefile.inc0000644000175000017500000000070711626275017014757 00000000000000EXTRA_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 yasm-1.3.0/modules/parsers/nasm/0000775000175000017500000000000012372060147013556 500000000000000yasm-1.3.0/modules/parsers/nasm/tests/0000775000175000017500000000000012372060146014717 500000000000000yasm-1.3.0/modules/parsers/nasm/tests/alignnop16.hex0000644000175000017500000000010411542263760017321 0000000000000066 b8 20 00 00 00 eb 08 90 90 90 90 90 90 90 90 c3 yasm-1.3.0/modules/parsers/nasm/tests/struczero.hex0000644000175000017500000000002411542263760017404 0000000000000067 66 8b 01 c3 yasm-1.3.0/modules/parsers/nasm/tests/alignnop32.asm0000644000175000017500000000004011542263760017312 00000000000000bits 32 mov eax,32 align 16 ret yasm-1.3.0/modules/parsers/nasm/tests/charconstmath.asm0000644000175000017500000000002511542263760020177 00000000000000db "string", " "+80h yasm-1.3.0/modules/parsers/nasm/tests/prevlocalwarn.asm0000644000175000017500000000005711542263760020225 00000000000000[bits 16] [section .text] .local: xor ax, ax yasm-1.3.0/modules/parsers/nasm/tests/locallabel.hex0000644000175000017500000000010011542263760017431 0000000000000000 00 01 00 02 00 00 00 07 00 08 00 07 00 08 00 yasm-1.3.0/modules/parsers/nasm/tests/locallabel2.hex0000644000175000017500000000001011542263760017513 0000000000000001 02 yasm-1.3.0/modules/parsers/nasm/tests/nasm-prefix.hex0000644000175000017500000000003011542263760017572 0000000000000026 8b 07 67 8b 07 yasm-1.3.0/modules/parsers/nasm/tests/dirwarning.errwarn0000644000175000017500000000007111542263760020406 00000000000000-:1: warning: [warning] directive not supported; ignored yasm-1.3.0/modules/parsers/nasm/tests/uscore.asm0000644000175000017500000000021011542263760016635 00000000000000dq 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 yasm-1.3.0/modules/parsers/nasm/tests/prevlocalwarn.errwarn0000644000175000017500000000006111542263760021120 00000000000000-:4: warning: no non-local label before `.local' yasm-1.3.0/modules/parsers/nasm/tests/equcolon.asm0000644000175000017500000000005711542263760017173 00000000000000equval: equ 5 equval2 equ 7 db equval, equval2 yasm-1.3.0/modules/parsers/nasm/tests/prevlocalwarn.hex0000644000175000017500000000001011542263760020216 0000000000000031 c0 yasm-1.3.0/modules/parsers/nasm/tests/Makefile.inc0000664000175000017500000000514512333771162017060 00000000000000TESTS += 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 yasm-1.3.0/modules/parsers/nasm/tests/struczero.asm0000644000175000017500000000011211542263760017376 00000000000000struc MYSTRUC .zero resd 0 endstruc foo: mov eax, [ecx+MYSTRUC.zero] ret yasm-1.3.0/modules/parsers/nasm/tests/strucbase.hex0000664000175000017500000000002012333771162017334 00000000000000f9 f9 fa 02 yasm-1.3.0/modules/parsers/nasm/tests/dy.asm0000644000175000017500000000015211542263760015756 00000000000000dy 0x0123456789abcdef00112233445566778899aabbccddeeff1111222233334444 dw label section .bss resy 1 label: yasm-1.3.0/modules/parsers/nasm/tests/dirwarning.asm0000644000175000017500000000001511542263760017504 00000000000000[warning -w] yasm-1.3.0/modules/parsers/nasm/tests/newsect.asm0000644000175000017500000000026511542263760017017 00000000000000[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 yasm-1.3.0/modules/parsers/nasm/tests/endcomma.asm0000644000175000017500000000002611542263760017125 00000000000000[bits 32] db 1,2,3,4, yasm-1.3.0/modules/parsers/nasm/tests/orphannowarn.asm0000644000175000017500000000015711542263760020063 00000000000000label: label2 label3 jmp label jmp label2 equ2: equ 5 equ3 equ 5 label5: times 2 db 5 label4 times 2 db 5 yasm-1.3.0/modules/parsers/nasm/tests/nasm_test.sh0000755000175000017500000000015711626275017017202 00000000000000#! /bin/sh ${srcdir}/out_test.sh nasm_test modules/parsers/nasm/tests "nasm-compat parser" "-f bin" "" exit $? yasm-1.3.0/modules/parsers/nasm/tests/equlocal.hex0000644000175000017500000000001411542263760017150 0000000000000005 74 fe yasm-1.3.0/modules/parsers/nasm/tests/locallabel2.asm0000644000175000017500000000006311542263760017517 00000000000000nl1: nl2:db .0 - nl2 .0: db .1 - nl2 .1: yasm-1.3.0/modules/parsers/nasm/tests/syntax-err.asm0000644000175000017500000000022211542263760017454 00000000000000global 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 ) yasm-1.3.0/modules/parsers/nasm/tests/alignnop16.asm0000644000175000017500000000004011542263760017314 00000000000000bits 16 mov eax,32 align 16 ret yasm-1.3.0/modules/parsers/nasm/tests/long.asm0000644000175000017500000000002211542263760016275 00000000000000mov [eax], long 0 yasm-1.3.0/modules/parsers/nasm/tests/newsect.hex0000644000175000017500000000002011542263760017010 0000000000000041 42 43 44 yasm-1.3.0/modules/parsers/nasm/tests/endcomma.hex0000644000175000017500000000002011542263760017123 0000000000000001 02 03 04 yasm-1.3.0/modules/parsers/nasm/tests/orphannowarn.hex0000644000175000017500000000004011542263760020056 00000000000000eb fe eb fc 05 05 05 05 yasm-1.3.0/modules/parsers/nasm/tests/equcolon.hex0000644000175000017500000000001011542263760017164 0000000000000005 07 yasm-1.3.0/modules/parsers/nasm/tests/nasm-prefix.asm0000644000175000017500000000004211542263760017571 00000000000000es mov ax, [bx] a32 mov ax, [bx] yasm-1.3.0/modules/parsers/nasm/tests/long.hex0000644000175000017500000000004011542263760016301 0000000000000067 66 c7 00 00 00 00 00 yasm-1.3.0/modules/parsers/nasm/tests/worphan/0000775000175000017500000000000012372060146016375 500000000000000yasm-1.3.0/modules/parsers/nasm/tests/worphan/orphanwarn.asm0000644000175000017500000000015711542263760021204 00000000000000label: label2 label3 jmp label jmp label2 equ2: equ 5 equ3 equ 5 label5: times 2 db 5 label4 times 2 db 5 yasm-1.3.0/modules/parsers/nasm/tests/worphan/orphanwarn.hex0000644000175000017500000000004011542263760021177 00000000000000eb fe eb fc 05 05 05 05 yasm-1.3.0/modules/parsers/nasm/tests/worphan/Makefile.inc0000644000175000017500000000051411626275017020531 00000000000000TESTS += 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 yasm-1.3.0/modules/parsers/nasm/tests/worphan/orphanwarn.errwarn0000644000175000017500000000021211542263760022074 00000000000000-: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 yasm-1.3.0/modules/parsers/nasm/tests/worphan/nasm_worphan_test.sh0000755000175000017500000000020711626275017022412 00000000000000#! /bin/sh ${srcdir}/out_test.sh nasm_test modules/parsers/nasm/tests/worphan "nasm-compat parser" "-Worphan-labels -f bin" "" exit $? yasm-1.3.0/modules/parsers/nasm/tests/dirwarning.hex0000644000175000017500000000000011542263760017502 00000000000000yasm-1.3.0/modules/parsers/nasm/tests/strucalign.hex0000644000175000017500000000012011542263760017514 0000000000000000 00 00 00 40 00 00 00 80 00 00 00 00 01 00 00 00 02 00 00 yasm-1.3.0/modules/parsers/nasm/tests/syntax-err.errwarn0000644000175000017500000000125411542263760020362 00000000000000-: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 yasm-1.3.0/modules/parsers/nasm/tests/alignnop32.hex0000644000175000017500000000010411542263760017317 00000000000000b8 20 00 00 00 eb 09 90 90 90 90 90 90 90 90 90 c3 yasm-1.3.0/modules/parsers/nasm/tests/dy.hex0000644000175000017500000000021011542263760015755 0000000000000044 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 yasm-1.3.0/modules/parsers/nasm/tests/locallabel.asm0000644000175000017500000000030511542263760017434 00000000000000label: 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 yasm-1.3.0/modules/parsers/nasm/tests/uscore.hex0000644000175000017500000000020011542263760016640 0000000000000033 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 yasm-1.3.0/modules/parsers/nasm/tests/strucbase.asm0000664000175000017500000000025512333771162017342 00000000000000struc 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 yasm-1.3.0/modules/parsers/nasm/tests/hexconst.hex0000644000175000017500000000004011542263760017175 0000000000000000 05 00 00 00 05 00 00 yasm-1.3.0/modules/parsers/nasm/tests/charconstmath.hex0000644000175000017500000000003411542263760020203 0000000000000073 74 72 69 6e 67 a0 yasm-1.3.0/modules/parsers/nasm/tests/equlocal.asm0000644000175000017500000000010611542263760017146 00000000000000blah .local equ 5 blah2 db blah.local .local nonlocal equ 6 je .local yasm-1.3.0/modules/parsers/nasm/tests/hexconst.asm0000644000175000017500000000002211542263760017171 00000000000000dd 0x500 dd 0X500 yasm-1.3.0/modules/parsers/nasm/tests/strucalign.asm0000644000175000017500000000026411542263760017521 00000000000000struc 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 yasm-1.3.0/modules/parsers/nasm/nasm-std.mac0000664000175000017500000000362712333771162015721 00000000000000; 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__ yasm-1.3.0/modules/parsers/nasm/Makefile.inc0000644000175000017500000000201311626275017015705 00000000000000libyasm_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 yasm-1.3.0/modules/parsers/nasm/CMakeLists.txt0000644000175000017500000000101311542263760016233 00000000000000YASM_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 ) yasm-1.3.0/modules/parsers/nasm/nasm-parse.c0000644000175000017500000016535511642251313015721 00000000000000/* * 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; } yasm-1.3.0/modules/parsers/nasm/nasm-parser.c0000644000175000017500000001021011630342300016050 00000000000000/* * 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 }; yasm-1.3.0/modules/parsers/nasm/nasm-token.re0000644000175000017500000006207011630342304016077 00000000000000/* * 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]); } yasm-1.3.0/modules/parsers/nasm/nasm-parser.h0000644000175000017500000000733211626275017016107 00000000000000/* * 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 yasm-1.3.0/modules/parsers/nasm/nasm-parser-struct.h0000644000175000017500000000532011630342274017417 00000000000000/* * 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 yasm-1.3.0/modules/parsers/yasm_parsers.xml0000644000175000017500000000576211626275017016007 00000000000000 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
yasm-1.3.0/modules/parsers/CMakeLists.txt0000644000175000017500000000011111542263760015273 00000000000000INCLUDE(parsers/gas/CMakeLists.txt) INCLUDE(parsers/nasm/CMakeLists.txt) yasm-1.3.0/modules/parsers/tasm/0000775000175000017500000000000012372060145013562 500000000000000yasm-1.3.0/modules/parsers/tasm/tests/0000775000175000017500000000000012372060146014725 500000000000000yasm-1.3.0/modules/parsers/tasm/tests/charstr.hex0000644000175000017500000000003011542263760017015 0000000000000066 b8 34 33 32 31 yasm-1.3.0/modules/parsers/tasm/tests/segment.hex0000644000175000017500000000003411542263760017015 0000000000000000 26 c6 06 00 00 01 yasm-1.3.0/modules/parsers/tasm/tests/struc.errwarn0000644000175000017500000000011111542263760017403 00000000000000-:6: warning: uninitialized space declared in code/data section: zeroing yasm-1.3.0/modules/parsers/tasm/tests/charstr.asm0000644000175000017500000000001711542263760017016 00000000000000mov eax,"1234" yasm-1.3.0/modules/parsers/tasm/tests/expr.hex0000644000175000017500000000001011542263760016323 0000000000000054 fe yasm-1.3.0/modules/parsers/tasm/tests/macro.asm0000644000175000017500000000006011542263760016447 00000000000000a macro reg,i mov reg,i endm a ax,0 a bx,1 yasm-1.3.0/modules/parsers/tasm/tests/Makefile.inc0000644000175000017500000000377411626275017017074 00000000000000TESTS += 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 yasm-1.3.0/modules/parsers/tasm/tests/size.asm0000644000175000017500000000001711542263760016322 00000000000000a db 0 mov a,1 yasm-1.3.0/modules/parsers/tasm/tests/irp.asm0000644000175000017500000000003511542263760016142 00000000000000irp i,<1,2,3> mov ax,i endm yasm-1.3.0/modules/parsers/tasm/tests/offset.asm0000644000175000017500000000005011542263760016633 00000000000000a db 1 mov ax,offset a mov ax,offset[a] yasm-1.3.0/modules/parsers/tasm/tests/res.asm0000644000175000017500000000002611542263760016141 00000000000000a db ? b db 2 dup (?) yasm-1.3.0/modules/parsers/tasm/tests/les.asm0000644000175000017500000000002011542263760016125 00000000000000a db 1 les ax,a yasm-1.3.0/modules/parsers/tasm/tests/segment.asm0000644000175000017500000000013411542263760017012 00000000000000data segment a db 0 data ends assume es:data code segment mov byte ptr [a],1 code ends yasm-1.3.0/modules/parsers/tasm/tests/equal.hex0000644000175000017500000000000011542263760016453 00000000000000yasm-1.3.0/modules/parsers/tasm/tests/lidt.hex0000644000175000017500000000005411542263760016311 0000000000000000 00 00 00 00 00 0f 01 1e 00 00 yasm-1.3.0/modules/parsers/tasm/tests/case.hex0000644000175000017500000000002411542263760016265 0000000000000000 00 00 01 00 yasm-1.3.0/modules/parsers/tasm/tests/expr.asm0000644000175000017500000000010011542263760016317 00000000000000a db low ((1 shl 2) and (16 shr 2) or (high 0x5034)) b db not 1 yasm-1.3.0/modules/parsers/tasm/tests/res.hex0000644000175000017500000000001411542263760016142 0000000000000000 00 00 yasm-1.3.0/modules/parsers/tasm/tests/dup.hex0000644000175000017500000000005011542263760016141 0000000000000001 01 01 01 01 01 01 01 01 01 yasm-1.3.0/modules/parsers/tasm/tests/lidt.asm0000644000175000017500000000005011542263760016301 00000000000000idtr dw 0 dd 0 lidt fword ptr idtr yasm-1.3.0/modules/parsers/tasm/tests/array.hex0000644000175000017500000000003011542263760016465 0000000000000000 01 02 a0 01 00 yasm-1.3.0/modules/parsers/tasm/tests/label.hex0000644000175000017500000000001411542263760016430 00000000000000b8 00 00 yasm-1.3.0/modules/parsers/tasm/tests/irp.hex0000644000175000017500000000004411542263760016146 00000000000000b8 01 00 b8 02 00 b8 03 00 yasm-1.3.0/modules/parsers/tasm/tests/array.asm0000644000175000017500000000002711542263760016467 00000000000000t db 0,1,2 mov al,t[1] yasm-1.3.0/modules/parsers/tasm/tests/quote.asm0000644000175000017500000000003011542263760016500 00000000000000a db 'don''t' b db """" yasm-1.3.0/modules/parsers/tasm/tests/macro.hex0000644000175000017500000000003011542263760016450 00000000000000b8 00 00 bb 01 00 yasm-1.3.0/modules/parsers/tasm/tests/struc.asm0000644000175000017500000000007211542263760016511 00000000000000s struc a db ? b db ? s ends v s <1,?> mov al,[v].b yasm-1.3.0/modules/parsers/tasm/tests/offset.hex0000644000175000017500000000003411542263760016641 0000000000000001 b8 00 00 b8 00 00 yasm-1.3.0/modules/parsers/tasm/tests/label.asm0000644000175000017500000000003511542263760016427 00000000000000a label byte mov ax,offset a yasm-1.3.0/modules/parsers/tasm/tests/case.asm0000644000175000017500000000002511542263760016262 00000000000000a db 0 B dw A c dw b yasm-1.3.0/modules/parsers/tasm/tests/struc.hex0000644000175000017500000000002411542263760016512 0000000000000001 00 a0 01 00 yasm-1.3.0/modules/parsers/tasm/tests/quote.hex0000644000175000017500000000003011542263760016504 0000000000000064 6f 6e 27 74 22 yasm-1.3.0/modules/parsers/tasm/tests/exe/0000775000175000017500000000000012372060146015506 500000000000000yasm-1.3.0/modules/parsers/tasm/tests/exe/exe.asm0000644000175000017500000000004411542263760016712 00000000000000a db 1 start proc int 22 start endp yasm-1.3.0/modules/parsers/tasm/tests/exe/Makefile.inc0000644000175000017500000000034311626275017017642 00000000000000TESTS += 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 yasm-1.3.0/modules/parsers/tasm/tests/exe/tasm_exe_test.sh0000755000175000017500000000017611626275017020641 00000000000000#! /bin/sh ${srcdir}/out_test.sh tasm_test modules/parsers/tasm/tests/exe "tasm-compat parser" "-f dosexe -p tasm" "" exit $? yasm-1.3.0/modules/parsers/tasm/tests/exe/exe.hex0000644000175000017500000000401411542263760016717 000000000000004d 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 yasm-1.3.0/modules/parsers/tasm/tests/dup.asm0000644000175000017500000000001711542263760016140 00000000000000a db 10 dup(1) yasm-1.3.0/modules/parsers/tasm/tests/les.hex0000644000175000017500000000002411542263760016135 0000000000000001 c4 06 00 00 yasm-1.3.0/modules/parsers/tasm/tests/equal.asm0000644000175000017500000000001311542263760016453 00000000000000a = byte 1 yasm-1.3.0/modules/parsers/tasm/tests/res.errwarn0000644000175000017500000000022211542263760017037 00000000000000-:1: warning: uninitialized space declared in code/data section: zeroing -:2: warning: uninitialized space declared in code/data section: zeroing yasm-1.3.0/modules/parsers/tasm/tests/tasm_test.sh0000755000175000017500000000016711626275017017217 00000000000000#! /bin/sh ${srcdir}/out_test.sh tasm_test modules/parsers/tasm/tests "tasm-compat parser" "-f bin -p tasm" "" exit $? yasm-1.3.0/modules/parsers/tasm/tests/size.hex0000644000175000017500000000003011542263760016321 0000000000000000 c6 06 00 00 01 yasm-1.3.0/modules/parsers/tasm/Makefile.inc0000644000175000017500000000014711626275017015721 00000000000000EXTRA_DIST += modules/parsers/tasm/tests/Makefile.inc include modules/parsers/tasm/tests/Makefile.inc yasm-1.3.0/modules/parsers/gas/0000775000175000017500000000000012372060147013372 500000000000000yasm-1.3.0/modules/parsers/gas/tests/0000775000175000017500000000000012372060146014533 500000000000000yasm-1.3.0/modules/parsers/gas/tests/gas-line2-err.asm0000644000175000017500000000005011542263760017522 00000000000000movw .line 600 movw .file "bar1.s" movw yasm-1.3.0/modules/parsers/gas/tests/gas-push.hex0000644000175000017500000000264011542263760016715 000000000000007f 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 yasm-1.3.0/modules/parsers/gas/tests/gas-line-err.asm0000644000175000017500000000014111542263760017441 00000000000000movw .file "bar1.s" movw .line 600 movw .line 200 movw .file "bar2.s" movw .file 5 "bar3.s" movw yasm-1.3.0/modules/parsers/gas/tests/gassectalign.hex0000644000175000017500000000354011542263760017632 000000000000007f 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 yasm-1.3.0/modules/parsers/gas/tests/execsect.hex0000644000175000017500000000330011542263760016763 000000000000007f 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 yasm-1.3.0/modules/parsers/gas/tests/leb128.hex0000644000175000017500000000340011542263760016156 000000000000007f 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 yasm-1.3.0/modules/parsers/gas/tests/reggroup-err.errwarn0000644000175000017500000000004311542263760020475 00000000000000-:5: error: bad register index `8' yasm-1.3.0/modules/parsers/gas/tests/dataref-imm.asm0000644000175000017500000000010011542263760017335 00000000000000movl $(.data+160),%eax .data .long .text .long .data .long .bss yasm-1.3.0/modules/parsers/gas/tests/Makefile.inc0000644000175000017500000000471111626275017016672 00000000000000TESTS += 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 yasm-1.3.0/modules/parsers/gas/tests/strzero.hex0000644000175000017500000000264011542263760016676 000000000000007f 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 yasm-1.3.0/modules/parsers/gas/tests/datavis2.asm0000644000175000017500000000044311542263760016676 00000000000000 .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" yasm-1.3.0/modules/parsers/gas/tests/gas-instlabel.hex0000644000175000017500000000274011542263760017714 000000000000007f 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 yasm-1.3.0/modules/parsers/gas/tests/execsect.asm0000644000175000017500000000011411542263760016757 00000000000000.section .foobar, "ax",@progbits xorl %eax, %eax .p2align 3 xorl %eax, %eax yasm-1.3.0/modules/parsers/gas/tests/gas-line2-err.errwarn0000644000175000017500000000017411542263760020431 00000000000000-:1: error: invalid number of operands -:3: error: invalid number of operands bar1.s:603: error: invalid number of operands yasm-1.3.0/modules/parsers/gas/tests/datavis2.hex0000644000175000017500000000544011542263760016704 000000000000007f 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 yasm-1.3.0/modules/parsers/gas/tests/reggroup.asm0000644000175000017500000000012511542263760017010 00000000000000 fadd %st (2) fadd %st (2), %st(0) fadd %st (2), %st fadd %st, %st # fadd %st (8) yasm-1.3.0/modules/parsers/gas/tests/varinsn.hex0000644000175000017500000000340011542263760016641 000000000000007f 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 yasm-1.3.0/modules/parsers/gas/tests/gas-float.hex0000644000175000017500000000274011542263760017044 000000000000007f 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 yasm-1.3.0/modules/parsers/gas/tests/gas-semi.hex0000644000175000017500000000314011542263760016667 000000000000007f 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 yasm-1.3.0/modules/parsers/gas/tests/varinsn.asm0000644000175000017500000000002011542263760016630 00000000000000movl %eax, movl yasm-1.3.0/modules/parsers/gas/tests/jmpcall.hex0000644000175000017500000000370011542263760016606 000000000000007f 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 yasm-1.3.0/modules/parsers/gas/tests/gas-float.asm0000644000175000017500000000003011542263760017026 00000000000000.double 0.1 .double -.0 yasm-1.3.0/modules/parsers/gas/tests/bin/0000775000175000017500000000000012372060146015303 500000000000000yasm-1.3.0/modules/parsers/gas/tests/bin/reptwarn.errwarn0000644000175000017500000000066211542263760020476 00000000000000-: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 yasm-1.3.0/modules/parsers/gas/tests/bin/reptlong.hex0000644000175000017500000000003411542263760017563 0000000000000001 00 00 00 00 00 02 yasm-1.3.0/modules/parsers/gas/tests/bin/reptwarn.asm0000644000175000017500000000012211542263760017565 00000000000000.file "-" .byte 1000 .rept 3 .byte 1000 .byte 1000 .endr .byte 1000 .byte 1000 yasm-1.3.0/modules/parsers/gas/tests/bin/reptzero.asm0000644000175000017500000000005611542263760017603 00000000000000.byte 1 .rept 0 .byte 2 .byte 3 .endr .byte 4 yasm-1.3.0/modules/parsers/gas/tests/bin/rept-err.asm0000644000175000017500000000003611542263760017467 00000000000000.rept 6 .endr .rept 3 .byte 0 yasm-1.3.0/modules/parsers/gas/tests/bin/gas-macro.hex0000644000175000017500000000003011542263760017576 0000000000000005 06 01 08 05 09 yasm-1.3.0/modules/parsers/gas/tests/bin/reptsimple.asm0000644000175000017500000000004611542263760020114 00000000000000.byte 1 .rept 5 .byte 0 .endr .byte 2 yasm-1.3.0/modules/parsers/gas/tests/bin/gas-str.asm0000644000175000017500000000001611623542630017301 00000000000000.string "a\\" yasm-1.3.0/modules/parsers/gas/tests/bin/Makefile.inc0000644000175000017500000000336411626275017017445 00000000000000TESTS += 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 yasm-1.3.0/modules/parsers/gas/tests/bin/reptnested.hex0000644000175000017500000000003611542263760020110 0000000000000001 03 03 01 03 03 01 03 03 05 yasm-1.3.0/modules/parsers/gas/tests/bin/gas-set.asm0000644000175000017500000000100211542263760017264 00000000000000.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 */ yasm-1.3.0/modules/parsers/gas/tests/bin/gas-comment.hex0000644000175000017500000000003011542263760020137 0000000000000000 00 00 00 00 01 yasm-1.3.0/modules/parsers/gas/tests/bin/reptempty.hex0000644000175000017500000000001011542263760017754 0000000000000001 02 yasm-1.3.0/modules/parsers/gas/tests/bin/gas-intel_syntax-noprefix.asm0000644000175000017500000000042611542263760023053 00000000000000.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 yasm-1.3.0/modules/parsers/gas/tests/bin/gas-str.hex0000644000175000017500000000001411623542630017303 0000000000000061 5c 00 yasm-1.3.0/modules/parsers/gas/tests/bin/reptlong.asm0000644000175000017500000002727711542263760017601 00000000000000.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 yasm-1.3.0/modules/parsers/gas/tests/bin/gas-comment.asm0000644000175000017500000000054711542263760020150 00000000000000# 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? yasm-1.3.0/modules/parsers/gas/tests/bin/reptzero.hex0000644000175000017500000000001011542263760017575 0000000000000001 04 yasm-1.3.0/modules/parsers/gas/tests/bin/rept-err.errwarn0000644000175000017500000000004711542263760020371 00000000000000-:3: error: rept without matching endr yasm-1.3.0/modules/parsers/gas/tests/bin/reptempty.asm0000644000175000017500000000003611542263760017760 00000000000000.byte 1 .rept 2 .endr .byte 2 yasm-1.3.0/modules/parsers/gas/tests/bin/gas-llabel.asm0000644000175000017500000000133311542263760017733 00000000000000# 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 yasm-1.3.0/modules/parsers/gas/tests/bin/gas-set.hex0000644000175000017500000000004511542263760017276 0000000000000005 04 06 04 0a 07 08 04 06 11 06 fe yasm-1.3.0/modules/parsers/gas/tests/bin/gas-llabel.hex0000644000175000017500000000400011542263760017731 00000000000000eb 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 yasm-1.3.0/modules/parsers/gas/tests/bin/gas_bin_test.sh0000755000175000017500000000020611626275017020225 00000000000000#! /bin/sh ${srcdir}/out_test.sh gas_bin_test modules/parsers/gas/tests/bin "gas-compat parser bin output" "-f bin -p gas" "" exit $? yasm-1.3.0/modules/parsers/gas/tests/bin/reptnested.asm0000644000175000017500000000006411542263760020105 00000000000000.rept 3 .byte 1 .rept 2 .byte 3 .endr .endr .byte 5 yasm-1.3.0/modules/parsers/gas/tests/bin/gas-macro.asm0000644000175000017500000000033411542263760017601 00000000000000.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 yasm-1.3.0/modules/parsers/gas/tests/bin/gas-comment.errwarn0000644000175000017500000000004611542263760021042 00000000000000-:25: warning: end of file in comment yasm-1.3.0/modules/parsers/gas/tests/bin/gas-intel_syntax-noprefix.hex0000644000175000017500000000035011542263760023053 0000000000000067 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 yasm-1.3.0/modules/parsers/gas/tests/bin/reptwarn.hex0000644000175000017500000000004411542263760017574 00000000000000e8 e8 e8 e8 e8 e8 e8 e8 e8 yasm-1.3.0/modules/parsers/gas/tests/bin/reptsimple.hex0000644000175000017500000000003411542263760020115 0000000000000001 00 00 00 00 00 02 yasm-1.3.0/modules/parsers/gas/tests/gas-segprefix.hex0000644000175000017500000000264011542263760017732 000000000000007f 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 yasm-1.3.0/modules/parsers/gas/tests/datavis.errwarn0000644000175000017500000000011211542263760017505 00000000000000-:37: warning: uninitialized space declared in code/data section: zeroing yasm-1.3.0/modules/parsers/gas/tests/leb128.asm0000644000175000017500000000032311542263760016153 00000000000000.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 yasm-1.3.0/modules/parsers/gas/tests/gas-fill.asm0000644000175000017500000000012211542263760016651 00000000000000.text .fill 5 .fill 3, 1 .fill 4, 2 .fill 4, 8, 0x11223344 .fill 4, 4, 0x11223344 yasm-1.3.0/modules/parsers/gas/tests/datavis.hex0000644000175000017500000000714011542263760016621 000000000000007f 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 yasm-1.3.0/modules/parsers/gas/tests/jmpcall.errwarn0000644000175000017500000000025511542263760017504 00000000000000-:4: warning: indirect call without `*' -:6: warning: indirect call without `*' -:7: warning: indirect call without `*' -:12: warning: skipping prefixes on this instruction yasm-1.3.0/modules/parsers/gas/tests/localcomm.hex0000644000175000017500000000420011542263760017126 000000000000007f 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 yasm-1.3.0/modules/parsers/gas/tests/localcomm.asm0000644000175000017500000000046311542263760017131 00000000000000 .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 yasm-1.3.0/modules/parsers/gas/tests/datavis.asm0000644000175000017500000000067011542263760016616 00000000000000#.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 yasm-1.3.0/modules/parsers/gas/tests/gas-line-err.errwarn0000644000175000017500000000040611542263760020345 00000000000000-: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 yasm-1.3.0/modules/parsers/gas/tests/gassectalign.asm0000644000175000017500000000006711542263760017627 00000000000000.text .align 8 .data .align 8 .align 16 .bss .align 32 yasm-1.3.0/modules/parsers/gas/tests/gas-fill.hex0000644000175000017500000000324011542263760016661 000000000000007f 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 yasm-1.3.0/modules/parsers/gas/tests/gas_test.sh0000755000175000017500000000016511626275017016631 00000000000000#! /bin/sh ${srcdir}/out_test.sh gas_test modules/parsers/gas/tests "gas-compat parser" "-f elf -p gas" ".o" exit $? yasm-1.3.0/modules/parsers/gas/tests/dataref-imm.hex0000644000175000017500000000450011542263760017351 000000000000007f 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 yasm-1.3.0/modules/parsers/gas/tests/gas-semi.asm0000644000175000017500000000007211542263760016664 00000000000000pushl %eax;ret x: pushl %eax; ret y: pushl %eax; z: ret yasm-1.3.0/modules/parsers/gas/tests/reggroup.hex0000644000175000017500000000264011542263760017020 000000000000007f 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 yasm-1.3.0/modules/parsers/gas/tests/reggroup-err.asm0000644000175000017500000000012411542263760017575 00000000000000 fadd %st (2) fadd %st (2), %st(0) fadd %st (2), %st fadd %st, %st fadd %st (8) yasm-1.3.0/modules/parsers/gas/tests/strzero.asm0000644000175000017500000000002411542263760016664 00000000000000.ascii "abc\000def" yasm-1.3.0/modules/parsers/gas/tests/gas-push.asm0000644000175000017500000000003511542263760016705 00000000000000push %gs pushw %gs pushl %gs yasm-1.3.0/modules/parsers/gas/tests/jmpcall.asm0000644000175000017500000000025111542263760016600 00000000000000#.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 yasm-1.3.0/modules/parsers/gas/tests/gas-instlabel.asm0000644000175000017500000000006111542263760017702 00000000000000 .globl SUB .type SUB, @function SUB: ADD = 5 yasm-1.3.0/modules/parsers/gas/tests/gas-segprefix.asm0000644000175000017500000000002411542263760017720 00000000000000.text es pushl %ebp yasm-1.3.0/modules/parsers/gas/Makefile.inc0000644000175000017500000000122311642251313015512 00000000000000libyasm_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 yasm-1.3.0/modules/parsers/gas/CMakeLists.txt0000644000175000017500000000041211642251313016041 00000000000000YASM_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 ) yasm-1.3.0/modules/parsers/gas/gas-parser.h0000644000175000017500000001202111642251313015515 00000000000000/* * 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 yasm-1.3.0/modules/parsers/gas/gas-parse-intel.c0000644000175000017500000000652711642251313016455 00000000000000/* * 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; } yasm-1.3.0/modules/parsers/gas/gas-parser.c0000644000175000017500000001030111642251313015507 00000000000000/* * 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 }; yasm-1.3.0/modules/parsers/gas/gas-parse.c0000664000175000017500000015263712333771162015361 00000000000000/* * 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); } yasm-1.3.0/modules/parsers/gas/gas-token.re0000644000175000017500000004115511642251313015532 00000000000000/* * 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; } */ } yasm-1.3.0/modules/preprocs/0000775000175000017500000000000012372060147012776 500000000000000yasm-1.3.0/modules/preprocs/Makefile.inc0000644000175000017500000000070711642251313015124 00000000000000EXTRA_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 yasm-1.3.0/modules/preprocs/nasm/0000775000175000017500000000000012372060147013734 500000000000000yasm-1.3.0/modules/preprocs/nasm/tests/0000775000175000017500000000000012372060146015075 500000000000000yasm-1.3.0/modules/preprocs/nasm/tests/orgsect.asm0000644000175000017500000000007511542263760017172 00000000000000ORG 100h label: db 5 STRUC Foo .bar resb 4 ENDSTRUC dw label yasm-1.3.0/modules/preprocs/nasm/tests/macroeof-err.errwarn0000644000175000017500000000007111542263760021001 00000000000000-:1: error: end of file while still defining macro `foo' yasm-1.3.0/modules/preprocs/nasm/tests/ifcritical-err.asm0000644000175000017500000000034411630251601020407 00000000000000; 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 yasm-1.3.0/modules/preprocs/nasm/tests/Makefile.inc0000644000175000017500000000250411626275017017232 00000000000000TESTS += 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 yasm-1.3.0/modules/preprocs/nasm/tests/ifcritical-err.errwarn0000644000175000017500000000005611542263760021322 00000000000000-:5: error: non-constant value given to `%if' yasm-1.3.0/modules/preprocs/nasm/tests/nasmpp-decimal.asm0000644000175000017500000000023511542263760020414 00000000000000%macro testConcat 0 %push ctx %assign %$x 0 %rep 8 movd eax, mm%$x %assign %$x %$x+1 %endrep %pop %endmacro testConcat yasm-1.3.0/modules/preprocs/nasm/tests/nasmpp_test.sh0000755000175000017500000000015411626275017017715 00000000000000#! /bin/sh ${srcdir}/out_test.sh nasmpp_test modules/preprocs/nasm/tests "nasm preproc" "-f bin" "" exit $? yasm-1.3.0/modules/preprocs/nasm/tests/longline.hex0000644000175000017500000000040011542263760017327 0000000000000051 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 yasm-1.3.0/modules/preprocs/nasm/tests/16args.asm0000644000175000017500000000050511542263760016625 00000000000000%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 yasm-1.3.0/modules/preprocs/nasm/tests/macroeof-err.asm0000644000175000017500000000001511542263760020077 00000000000000%macro foo 0 yasm-1.3.0/modules/preprocs/nasm/tests/longline.asm0000644000175000017500000002051511542263760017334 00000000000000 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) yasm-1.3.0/modules/preprocs/nasm/tests/nasmpp-nested.asm0000644000175000017500000000063111542263760020300 00000000000000%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 yasm-1.3.0/modules/preprocs/nasm/tests/orgsect.hex0000644000175000017500000000001411542263760017167 0000000000000005 00 01 yasm-1.3.0/modules/preprocs/nasm/tests/nasmpp-decimal.hex0000644000175000017500000000014011542263760020413 000000000000000f 7e c0 0f 7e c8 0f 7e d0 0f 7e d8 0f 7e e0 0f 7e e8 0f 7e f0 0f 7e f8 yasm-1.3.0/modules/preprocs/nasm/tests/nasmpp-bigint.hex0000644000175000017500000000000411542263760020270 0000000000000000 yasm-1.3.0/modules/preprocs/nasm/tests/scope-err.errwarn0000644000175000017500000000020611542263760020317 00000000000000-:2: warning: b -:5: warning: c -:8: warning: d -:10: warning: c -:12: warning: b -:13: error: `%endscope': already popped all levels yasm-1.3.0/modules/preprocs/nasm/tests/nasmpp-bigint.asm0000644000175000017500000000006411542263760020272 00000000000000%if 0x100000000000000 > 0x1000000000000 db 0 %endif yasm-1.3.0/modules/preprocs/nasm/tests/16args.hex0000644000175000017500000000060011542263760016625 0000000000000066 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 yasm-1.3.0/modules/preprocs/nasm/tests/nasmpp-nested.errwarn0000644000175000017500000000013311542263760021175 00000000000000-:27: warning: (WORK_1:2) 4 -:28: warning: (WORK_2:2) 4 -:29: warning: (DONT_WORK_1:3) 4 4 yasm-1.3.0/modules/preprocs/nasm/tests/nasmpp-nested.hex0000644000175000017500000000000011542263760020272 00000000000000yasm-1.3.0/modules/preprocs/nasm/tests/noinclude-err.errwarn0000644000175000017500000000007411542263760021171 00000000000000yasm: FATAL: unable to open include file `doesnotexist.inc' yasm-1.3.0/modules/preprocs/nasm/tests/scope-err.asm0000644000175000017500000000017511542263760017424 00000000000000%define a b %error a %scope %define a c %error a %scope %define a d %error a %endscope %error a %endscope %error a %endscope yasm-1.3.0/modules/preprocs/nasm/tests/noinclude-err.asm0000644000175000017500000000003411542263760020265 00000000000000%include "doesnotexist.inc" yasm-1.3.0/modules/preprocs/nasm/Makefile.inc0000644000175000017500000000251111626275017016066 00000000000000libyasm_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 yasm-1.3.0/modules/preprocs/nasm/CMakeLists.txt0000644000175000017500000000133111542263760016414 00000000000000add_executable(genversion preprocs/nasm/genversion.c) get_target_property(_tmp_GENVERSION_EXE genversion LOCATION) add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/version.mac COMMAND ${_tmp_GENVERSION_EXE} ${CMAKE_CURRENT_BINARY_DIR}/version.mac DEPENDS ${_tmp_GENVERSION_EXE} ) 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 ) yasm-1.3.0/modules/preprocs/nasm/nasm-preproc.c0000644000175000017500000002136411642251313016426 00000000000000/* * 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 }; yasm-1.3.0/modules/preprocs/nasm/nasmlib.c0000644000175000017500000001103311542263760015445 00000000000000/* 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; } yasm-1.3.0/modules/preprocs/nasm/genversion.c0000664000175000017500000000545312333771162016211 00000000000000/* * * 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; } yasm-1.3.0/modules/preprocs/nasm/nasm.h0000644000175000017500000002256311542263760014775 00000000000000/* 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 yasm-1.3.0/modules/preprocs/nasm/nasm-pp.c0000664000175000017500000052010612333771162015402 00000000000000/* -*- 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 }; yasm-1.3.0/modules/preprocs/nasm/nasmlib.h0000644000175000017500000000370111542263760015455 00000000000000/* 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 yasm-1.3.0/modules/preprocs/nasm/nasm-pp.h0000644000175000017500000000105611542263760015404 00000000000000/* 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 yasm-1.3.0/modules/preprocs/nasm/nasm-eval.h0000644000175000017500000000073711542263760015721 00000000000000/* 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 yasm-1.3.0/modules/preprocs/nasm/nasm-eval.c0000644000175000017500000002446011542263760015713 00000000000000/* 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 (); } yasm-1.3.0/modules/preprocs/CMakeLists.txt0000644000175000017500000000022511642251313015447 00000000000000INCLUDE(preprocs/nasm/CMakeLists.txt) INCLUDE(preprocs/raw/CMakeLists.txt) INCLUDE(preprocs/cpp/CMakeLists.txt) INCLUDE(preprocs/gas/CMakeLists.txt) yasm-1.3.0/modules/preprocs/raw/0000775000175000017500000000000012372060147013567 500000000000000yasm-1.3.0/modules/preprocs/raw/tests/0000775000175000017500000000000012372060146014730 500000000000000yasm-1.3.0/modules/preprocs/raw/tests/rawpp_test.sh0000755000175000017500000000016011626275017017400 00000000000000#! /bin/sh ${srcdir}/out_test.sh rawpp_test modules/preprocs/raw/tests "raw preproc" "-f bin -r raw" "" exit $? yasm-1.3.0/modules/preprocs/raw/tests/Makefile.inc0000644000175000017500000000032611626275017017065 00000000000000TESTS += 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 yasm-1.3.0/modules/preprocs/raw/tests/longline.hex0000644000175000017500000000000011542263760017156 00000000000000yasm-1.3.0/modules/preprocs/raw/tests/longline.asm0000644000175000017500000000100511542263760017160 00000000000000aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: yasm-1.3.0/modules/preprocs/raw/Makefile.inc0000644000175000017500000000027511626275017015726 00000000000000libyasm_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 yasm-1.3.0/modules/preprocs/raw/CMakeLists.txt0000644000175000017500000000010111542263760016241 00000000000000YASM_ADD_MODULE(preproc_raw preprocs/raw/raw-preproc.c ) yasm-1.3.0/modules/preprocs/raw/raw-preproc.c0000644000175000017500000001132611642251313016111 00000000000000/* * 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 }; yasm-1.3.0/modules/preprocs/cpp/0000775000175000017500000000000012372060147013560 500000000000000yasm-1.3.0/modules/preprocs/cpp/Makefile.inc0000644000175000017500000000023011542263760015705 00000000000000# Makefile for cpp module. # Copied from raw preprocessor module. libyasm_a_SOURCES += modules/preprocs/cpp/cpp-preproc.c YASM_MODULES += preproc_cpp yasm-1.3.0/modules/preprocs/cpp/CMakeLists.txt0000644000175000017500000000010111542263760016232 00000000000000YASM_ADD_MODULE(preproc_cpp preprocs/cpp/cpp-preproc.c ) yasm-1.3.0/modules/preprocs/cpp/cpp-preproc.c0000644000175000017500000002546211642251313016101 00000000000000/* * 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 }; yasm-1.3.0/modules/preprocs/tasm/0000775000175000017500000000000012372060145013740 500000000000000yasm-1.3.0/modules/preprocs/tasm/tests/0000775000175000017500000000000012372060146015103 500000000000000yasm-1.3.0/modules/preprocs/tasm/tests/tasm-comment-instr.hex0000644000175000017500000000005411542263760021274 0000000000000027 5b 30 3b 34 30 3b 33 37 6d 24 yasm-1.3.0/modules/preprocs/tasm/tests/Makefile.inc0000644000175000017500000000056411626275017017244 00000000000000TESTS += 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 yasm-1.3.0/modules/preprocs/tasm/tests/tasm-comment-instr.asm0000644000175000017500000000004111542263760021264 00000000000000ansi_normal db 0x27,'[0;40;37m$' yasm-1.3.0/modules/preprocs/tasm/tests/tasm-assume-comment.hex0000644000175000017500000000000011542263760021421 00000000000000yasm-1.3.0/modules/preprocs/tasm/tests/tasm-assume-comment.asm0000644000175000017500000000016511542263760021431 00000000000000assume cs:code,ds:code,es:code ; tiny model (CS=DS=ES) assume ds:code,es:code; close comment assume fs:code,gs:code yasm-1.3.0/modules/preprocs/tasm/tests/tasmpp_test.sh0000755000175000017500000000016411626275017017732 00000000000000#! /bin/sh ${srcdir}/out_test.sh tasmpp_test modules/preprocs/tasm/tests "tasm preproc" "-f bin -p tasm" "" exit $? yasm-1.3.0/modules/preprocs/tasm/Makefile.inc0000644000175000017500000000015111626275017016072 00000000000000EXTRA_DIST += modules/preprocs/tasm/tests/Makefile.inc include modules/preprocs/tasm/tests/Makefile.inc yasm-1.3.0/modules/preprocs/gas/0000775000175000017500000000000012372060147013550 500000000000000yasm-1.3.0/modules/preprocs/gas/tests/0000775000175000017500000000000012372060145014710 500000000000000yasm-1.3.0/modules/preprocs/gas/tests/Makefile.inc0000644000175000017500000000033211642251313017032 00000000000000#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 yasm-1.3.0/modules/preprocs/gas/Makefile.inc0000644000175000017500000000044711642251313015677 00000000000000libyasm_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 yasm-1.3.0/modules/preprocs/gas/CMakeLists.txt0000644000175000017500000000013511642251313016221 00000000000000YASM_ADD_MODULE(preproc_gas preprocs/gas/gas-preproc.c preprocs/gas/gas-eval.c ) yasm-1.3.0/modules/preprocs/gas/gas-preproc.c0000664000175000017500000012174412371621045016066 00000000000000/* * 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 }; yasm-1.3.0/modules/preprocs/gas/gas-eval.c0000644000175000017500000002465111642251313015335 00000000000000/* 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 (); } yasm-1.3.0/modules/preprocs/gas/gas-eval.h0000644000175000017500000001155711642251313015343 00000000000000/* 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 yasm-1.3.0/modules/listfmts/0000775000175000017500000000000012372060147013006 500000000000000yasm-1.3.0/modules/listfmts/Makefile.inc0000644000175000017500000000013511626275017015140 00000000000000EXTRA_DIST += modules/listfmts/nasm/Makefile.inc include modules/listfmts/nasm/Makefile.inc yasm-1.3.0/modules/listfmts/nasm/0000775000175000017500000000000012372060147013744 500000000000000yasm-1.3.0/modules/listfmts/nasm/Makefile.inc0000644000175000017500000000030411626275017016074 00000000000000libyasm_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 yasm-1.3.0/modules/listfmts/nasm/CMakeLists.txt0000644000175000017500000000010411542263760016421 00000000000000YASM_ADD_MODULE(listfmt_nasm listfmts/nasm/nasm-listfmt.c ) yasm-1.3.0/modules/listfmts/nasm/nasm-listfmt.c0000644000175000017500000002501611626275017016455 00000000000000/* * 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 }; yasm-1.3.0/modules/listfmts/CMakeLists.txt0000644000175000017500000000004611542263760015470 00000000000000INCLUDE(listfmts/nasm/CMakeLists.txt) yasm-1.3.0/Mkfiles/0000775000175000017500000000000012372060147011063 500000000000000yasm-1.3.0/Mkfiles/dj/0000775000175000017500000000000012372060147011460 500000000000000yasm-1.3.0/Mkfiles/dj/config.h0000664000175000017500000001115012333771162013017 00000000000000#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 */ yasm-1.3.0/Mkfiles/dj/YASM-VERSION.h0000664000175000017500000000010412372060147013440 00000000000000#define PACKAGE_STRING "yasm 1.3.0" #define PACKAGE_VERSION "1.3.0" yasm-1.3.0/Mkfiles/dj/libyasm-stdint.h0000644000175000017500000000014211542263760014513 00000000000000#ifndef _UINTPTR_T_DEFINED typedef unsigned long uintptr_t; #define _UINTPTR_T_DEFINED #endif yasm-1.3.0/Mkfiles/vc12/0000775000175000017500000000000012372060147011636 500000000000000yasm-1.3.0/Mkfiles/vc12/config.h0000664000175000017500000001063512333771162013204 00000000000000#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 */ yasm-1.3.0/Mkfiles/vc12/yasm.sln0000664000175000017500000002252312333771162013254 00000000000000Microsoft 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 yasm-1.3.0/Mkfiles/vc12/vsyasm.targets0000664000175000017500000001031012333771162014471 00000000000000 _YASM $(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml @(YASM, '|') $(ComputeLinkInputsTargets); ComputeYASMOutput; $(ComputeLibInputsTargets); ComputeYASMOutput; yasm-1.3.0/Mkfiles/vc12/crt_secure_no_deprecate.props0000664000175000017500000000070412333771162017515 00000000000000 <_ProjectFileVersion>10.0.21006.1 _CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) yasm-1.3.0/Mkfiles/vc12/libyasm/0000775000175000017500000000000012372060147013276 500000000000000yasm-1.3.0/Mkfiles/vc12/libyasm/libyasm.vcxproj0000664000175000017500000003344412333771162016306 00000000000000 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 yasm-1.3.0/Mkfiles/vc12/libyasm/libyasm.vcxproj.filters0000664000175000017500000001546712333771162017762 00000000000000 {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 yasm-1.3.0/Mkfiles/vc12/vsyasm.vcxproj0000664000175000017500000003327112333771162014526 00000000000000 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 yasm-1.3.0/Mkfiles/vc12/crt_secure_no_deprecate.vsprops0000664000175000017500000000041512333771162020065 00000000000000 yasm-1.3.0/Mkfiles/vc12/vsyasm.xml0000664000175000017500000002021112333771162013621 00000000000000 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 yasm-1.3.0/Mkfiles/vc12/YASM-VERSION.h0000664000175000017500000000010412372060147013616 00000000000000#define PACKAGE_STRING "yasm 1.3.0" #define PACKAGE_VERSION "1.3.0" yasm-1.3.0/Mkfiles/vc12/yasm.vcxproj.filters0000664000175000017500000000265712333771162015630 00000000000000 {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 yasm-1.3.0/Mkfiles/vc12/modules/0000775000175000017500000000000012372060147013306 500000000000000yasm-1.3.0/Mkfiles/vc12/modules/modules.vcxproj0000664000175000017500000004174612333771162016332 00000000000000 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 yasm-1.3.0/Mkfiles/vc12/modules/modules.vcxproj.filters0000664000175000017500000002604412333771162017773 00000000000000 {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 yasm-1.3.0/Mkfiles/vc12/out_copy_rename.bat0000664000175000017500000000125212333771162015441 00000000000000@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 yasm-1.3.0/Mkfiles/vc12/vsyasm.props0000664000175000017500000000221512333771162014170 00000000000000 Midl CustomBuild _SelectedFiles;$(YASMDependsOn) $(VCInstallDir)bin\ False $(IntDir) 0 0 "$(YasmPath)"vsyasm.exe -Xvc -f $(Platform) [AllOptions] [AdditionalOptions] [Inputs] %(ObjectFile) Assembling %(Filename)%(Extension) false yasm-1.3.0/Mkfiles/vc12/readme.vc12.txt0000664000175000017500000000742612333771162014342 00000000000000Building 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 yasm-1.3.0/Mkfiles/vc12/yasm.vcxproj0000664000175000017500000003357712333771162014166 00000000000000 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 yasm-1.3.0/Mkfiles/vc12/ytasm.vcxproj0000664000175000017500000003316112333771162014337 00000000000000 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 yasm-1.3.0/Mkfiles/vc10/0000775000175000017500000000000012372060147011634 500000000000000yasm-1.3.0/Mkfiles/vc10/config.h0000664000175000017500000001110712333771162013175 00000000000000#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 */ yasm-1.3.0/Mkfiles/vc10/yasm.sln0000664000175000017500000002265212333771162013255 00000000000000Microsoft 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 yasm-1.3.0/Mkfiles/vc10/vsyasm.targets0000644000175000017500000001046311542263760014477 00000000000000 _YASM $(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml @(YASM, '|') $(ComputeLinkInputsTargets); ComputeYASMOutput; $(ComputeLibInputsTargets); ComputeYASMOutput; yasm-1.3.0/Mkfiles/vc10/genstring/0000775000175000017500000000000012372060147013634 500000000000000yasm-1.3.0/Mkfiles/vc10/genstring/genstring.vcxproj0000644000175000017500000001257011542263760017200 00000000000000 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)" yasm-1.3.0/Mkfiles/vc10/genstring/run.bat0000644000175000017500000000005711542263760015054 00000000000000cd ..\..\.. %1 license_msg license.c COPYING yasm-1.3.0/Mkfiles/vc10/genstring/genstring.vcxproj.filters0000644000175000017500000000110111542263760020633 00000000000000 {28EBE11C-5BE8-4935-9381-F57696749E0C} cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx Source Files yasm-1.3.0/Mkfiles/vc10/crt_secure_no_deprecate.props0000644000175000017500000000071611542263760017515 00000000000000 <_ProjectFileVersion>10.0.21006.1 _CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) yasm-1.3.0/Mkfiles/vc10/libyasm/0000775000175000017500000000000012372060147013274 500000000000000yasm-1.3.0/Mkfiles/vc10/libyasm/libyasm.vcxproj0000644000175000017500000003360311542263760016300 00000000000000 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 yasm-1.3.0/Mkfiles/vc10/libyasm/libyasm.vcxproj.filters0000644000175000017500000001577611542263760017762 00000000000000 {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 yasm-1.3.0/Mkfiles/vc10/genperf/0000775000175000017500000000000012372060147013262 500000000000000yasm-1.3.0/Mkfiles/vc10/genperf/genperf.vcxproj.filters0000644000175000017500000000371611542263760017725 00000000000000 {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 yasm-1.3.0/Mkfiles/vc10/genperf/run.bat0000664000175000017500000000164012333771162014502 00000000000000cd ..\..\.. @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 yasm-1.3.0/Mkfiles/vc10/genperf/genperf.vcxproj0000644000175000017500000001620411542263760016252 00000000000000 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) yasm-1.3.0/Mkfiles/vc10/re2c/0000775000175000017500000000000012372060147012467 500000000000000yasm-1.3.0/Mkfiles/vc10/re2c/re2c.vcxproj.filters0000644000175000017500000000554111542263760016335 00000000000000 {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 yasm-1.3.0/Mkfiles/vc10/re2c/re2c.vcxproj0000644000175000017500000001527211542263760014670 00000000000000 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)" yasm-1.3.0/Mkfiles/vc10/re2c/run.bat0000644000175000017500000000025611542263760013710 00000000000000cd ..\..\..\ %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 yasm-1.3.0/Mkfiles/vc10/vsyasm.vcxproj0000644000175000017500000003343211542263760014522 00000000000000 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 yasm-1.3.0/Mkfiles/vc10/readme.vc10.txt0000644000175000017500000001034311542263760014325 00000000000000Building 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 yasm-1.3.0/Mkfiles/vc10/crt_secure_no_deprecate.vsprops0000644000175000017500000000043011542263760020057 00000000000000 yasm-1.3.0/Mkfiles/vc10/genmodule/0000775000175000017500000000000012372060147013613 500000000000000yasm-1.3.0/Mkfiles/vc10/genmodule/genmodule.vcxproj0000644000175000017500000001350611542263760017136 00000000000000 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)" yasm-1.3.0/Mkfiles/vc10/genmodule/genmodule.vcxproj.filters0000644000175000017500000000124511542263760020602 00000000000000 {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx Source Files yasm-1.3.0/Mkfiles/vc10/genmodule/run.bat0000644000175000017500000000007211542263760015030 00000000000000@echo off cd ..\..\.. %1 libyasm\module.in Makefile.am yasm-1.3.0/Mkfiles/vc10/vsyasm.xml0000644000175000017500000002064311542263760013627 00000000000000 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 yasm-1.3.0/Mkfiles/vc10/YASM-VERSION.h0000664000175000017500000000010412372060147013614 00000000000000#define PACKAGE_STRING "yasm 1.3.0" #define PACKAGE_VERSION "1.3.0" yasm-1.3.0/Mkfiles/vc10/genmacro/0000775000175000017500000000000012372060147013427 500000000000000yasm-1.3.0/Mkfiles/vc10/genmacro/genmacro.vcxproj.filters0000644000175000017500000000111711542263760020230 00000000000000 {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx Source Files yasm-1.3.0/Mkfiles/vc10/genmacro/genmacro.vcxproj0000644000175000017500000001317711542263760016572 00000000000000 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 yasm-1.3.0/Mkfiles/vc10/genmacro/run.bat0000644000175000017500000000041611542263760014646 00000000000000cd ..\..\.. %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 yasm-1.3.0/Mkfiles/vc10/yasm.vcxproj.filters0000644000175000017500000000272711542263760015623 00000000000000 {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 yasm-1.3.0/Mkfiles/vc10/modules/0000775000175000017500000000000012372060147013304 500000000000000yasm-1.3.0/Mkfiles/vc10/modules/modules.vcxproj0000664000175000017500000004216412333771162016323 00000000000000 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 yasm-1.3.0/Mkfiles/vc10/modules/modules.vcxproj.filters0000664000175000017500000002644312333771162017774 00000000000000 {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 yasm-1.3.0/Mkfiles/vc10/out_copy_rename.bat0000644000175000017500000000132411542263760015436 00000000000000@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 yasm-1.3.0/Mkfiles/vc10/vsyasm.props0000644000175000017500000000224711542263760014172 00000000000000 Midl CustomBuild _SelectedFiles;$(YASMDependsOn) $(VCInstallDir)bin\ False $(IntDir) 0 0 "$(YasmPath)"vsyasm.exe -Xvc -f $(Platform) [AllOptions] [AdditionalOptions] [Inputs] %(ObjectFile) Assembling %(Filename)%(Extension) false yasm-1.3.0/Mkfiles/vc10/genversion/0000775000175000017500000000000012372060147014013 500000000000000yasm-1.3.0/Mkfiles/vc10/genversion/genversion.vcxproj0000664000175000017500000001344312333771162017537 00000000000000 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 yasm-1.3.0/Mkfiles/vc10/genversion/genversion.vcxproj.filters0000644000175000017500000000161511542263760021203 00000000000000 {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 yasm-1.3.0/Mkfiles/vc10/genversion/run.bat0000644000175000017500000000003511542263760015227 00000000000000cd ..\..\.. %1 version.mac yasm-1.3.0/Mkfiles/vc10/yasm.vcxproj0000644000175000017500000003374411542263760014157 00000000000000 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 yasm-1.3.0/Mkfiles/vc10/libyasm-stdint.h0000644000175000017500000000022511542263760014671 00000000000000#ifndef _UINTPTR_T_DEFINED #ifdef _WIN64 #include #else typedef unsigned long uintptr_t; #endif #define _UINTPTR_T_DEFINED #endif yasm-1.3.0/Mkfiles/vc10/ytasm.vcxproj0000644000175000017500000003332111542263760014332 00000000000000 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 yasm-1.3.0/Mkfiles/vc9/0000775000175000017500000000000012372060147011564 500000000000000yasm-1.3.0/Mkfiles/vc9/config.h0000664000175000017500000001110712333771162013125 00000000000000#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 */ yasm-1.3.0/Mkfiles/vc9/yasm.sln0000664000175000017500000002500612333771162013201 00000000000000Microsoft 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 yasm-1.3.0/Mkfiles/vc9/genstring/0000775000175000017500000000000012372060147013564 500000000000000yasm-1.3.0/Mkfiles/vc9/genstring/genstring.vcproj0000644000175000017500000001023711542263760016736 00000000000000 yasm-1.3.0/Mkfiles/vc9/genstring/run.bat0000644000175000017500000000005711542263760015004 00000000000000cd ..\..\.. %1 license_msg license.c COPYING yasm-1.3.0/Mkfiles/vc9/libyasm/0000775000175000017500000000000012372060147013224 500000000000000yasm-1.3.0/Mkfiles/vc9/libyasm/libyasm.vcproj0000644000175000017500000002737211542263760016046 00000000000000 yasm-1.3.0/Mkfiles/vc9/genperf/0000775000175000017500000000000012372060147013212 500000000000000yasm-1.3.0/Mkfiles/vc9/genperf/genperf.vcproj0000644000175000017500000001207411542263760016013 00000000000000 yasm-1.3.0/Mkfiles/vc9/genperf/run.bat0000644000175000017500000000111111542263760014422 00000000000000cd ..\..\.. @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 yasm-1.3.0/Mkfiles/vc9/re2c/0000775000175000017500000000000012372060147012417 500000000000000yasm-1.3.0/Mkfiles/vc9/re2c/re2c.vcproj0000644000175000017500000001340111542263760014420 00000000000000 yasm-1.3.0/Mkfiles/vc9/re2c/run.bat0000644000175000017500000000025611542263760013640 00000000000000cd ..\..\..\ %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 yasm-1.3.0/Mkfiles/vc9/vsyasm.vcproj0000644000175000017500000002234011542263760014256 00000000000000 yasm-1.3.0/Mkfiles/vc9/crt_secure_no_deprecate.vsprops0000644000175000017500000000043011542263760020007 00000000000000 yasm-1.3.0/Mkfiles/vc9/genmodule/0000775000175000017500000000000012372060147013543 500000000000000yasm-1.3.0/Mkfiles/vc9/genmodule/genmodule.vcproj0000644000175000017500000001053511542263760016675 00000000000000 yasm-1.3.0/Mkfiles/vc9/genmodule/run.bat0000644000175000017500000000007211542263760014760 00000000000000@echo off cd ..\..\.. %1 libyasm\module.in Makefile.am yasm-1.3.0/Mkfiles/vc9/readme.vc9.txt0000644000175000017500000001030611542263760014204 00000000000000 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 yasm-1.3.0/Mkfiles/vc9/YASM-VERSION.h0000664000175000017500000000010412372060147013544 00000000000000#define PACKAGE_STRING "yasm 1.3.0" #define PACKAGE_VERSION "1.3.0" yasm-1.3.0/Mkfiles/vc9/genmacro/0000775000175000017500000000000012372060147013357 500000000000000yasm-1.3.0/Mkfiles/vc9/genmacro/genmacro.vcproj0000644000175000017500000001025111542263760016320 00000000000000 yasm-1.3.0/Mkfiles/vc9/genmacro/run.bat0000644000175000017500000000041611542263760014576 00000000000000cd ..\..\.. %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 yasm-1.3.0/Mkfiles/vc9/ytasm.vcproj0000644000175000017500000002244311542263760014075 00000000000000 yasm-1.3.0/Mkfiles/vc9/modules/0000775000175000017500000000000012372060147013234 500000000000000yasm-1.3.0/Mkfiles/vc9/modules/modules.vcproj0000644000175000017500000003275611542263760016070 00000000000000 yasm-1.3.0/Mkfiles/vc9/yasm.rules0000644000175000017500000000625211623542630013534 00000000000000 yasm-1.3.0/Mkfiles/vc9/genversion/0000775000175000017500000000000012372060147013743 500000000000000yasm-1.3.0/Mkfiles/vc9/genversion/run.bat0000644000175000017500000000003511542263760015157 00000000000000cd ..\..\.. %1 version.mac yasm-1.3.0/Mkfiles/vc9/genversion/genversion.vcproj0000664000175000017500000001074312333771162017277 00000000000000 yasm-1.3.0/Mkfiles/vc9/yasm.vcproj0000644000175000017500000002243511542263760013712 00000000000000 yasm-1.3.0/Mkfiles/vc9/libyasm-stdint.h0000644000175000017500000000022511542263760014621 00000000000000#ifndef _UINTPTR_T_DEFINED #ifdef _WIN64 #include #else typedef unsigned long uintptr_t; #endif #define _UINTPTR_T_DEFINED #endif yasm-1.3.0/Mkfiles/vc9/vc98_swap.py0000644000175000017500000000276611542263760013716 00000000000000 # 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" yasm-1.3.0/Mkfiles/Makefile.flat0000664000175000017500000001606612333771162013404 00000000000000# 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 yasm-1.3.0/Mkfiles/Makefile.dj0000664000175000017500000001531012333771162013042 00000000000000# 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 $@ $< yasm-1.3.0/cmake/0000775000175000017500000000000012372060147010551 500000000000000yasm-1.3.0/cmake/CMakeLists.txt0000644000175000017500000000003211542263760013226 00000000000000ADD_SUBDIRECTORY(modules) yasm-1.3.0/cmake/modules/0000775000175000017500000000000012372060147012221 500000000000000yasm-1.3.0/cmake/modules/CMakeLists.txt0000644000175000017500000000007511542263760014705 00000000000000FILE(GLOB cmakeFiles "${CMAKE_CURRENT_SOURCE_DIR}/*.cmake") yasm-1.3.0/cmake/modules/YasmMacros.cmake0000664000175000017500000000627212335722632015233 00000000000000# 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) get_target_property(_tmp_GENPERF_EXE genperf LOCATION) add_custom_command( OUTPUT ${_out_NAME} COMMAND ${_tmp_GENPERF_EXE} ${_in_NAME} ${_out_NAME} DEPENDS ${_tmp_GENPERF_EXE} MAIN_DEPENDENCY ${_in_NAME} ) endmacro (YASM_GENPERF) macro (YASM_RE2C _in_NAME _out_NAME) get_target_property(_tmp_RE2C_EXE re2c LOCATION) add_custom_command( OUTPUT ${_out_NAME} COMMAND ${_tmp_RE2C_EXE} ${ARGN} -o ${_out_NAME} ${_in_NAME} DEPENDS ${_tmp_RE2C_EXE} MAIN_DEPENDENCY ${_in_NAME} ) endmacro (YASM_RE2C) macro (YASM_GENMACRO _in_NAME _out_NAME _var_NAME) get_target_property(_tmp_GENMACRO_EXE genmacro LOCATION) add_custom_command( OUTPUT ${_out_NAME} COMMAND ${_tmp_GENMACRO_EXE} ${_out_NAME} ${_var_NAME} ${_in_NAME} DEPENDS ${_tmp_GENMACRO_EXE} MAIN_DEPENDENCY ${_in_NAME} ) endmacro (YASM_GENMACRO) yasm-1.3.0/cmake/modules/VersionGen.cmake0000664000175000017500000000654212371736130015232 00000000000000# 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) yasm-1.3.0/cmake/modules/DummyCFile.c0000644000175000017500000000003311542263760014301 00000000000000int main() { return 0; } yasm-1.3.0/Makefile.am0000664000175000017500000002060412371736123011452 00000000000000SUBDIRS = 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 yasm-1.3.0/x86insn_gas.gperf0000664000175000017500000042031112371621515012607 00000000000000/* 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 yasm-1.3.0/ChangeLog0000664000175000017500000000062512371736127011175 000000000000002014-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. yasm-1.3.0/ConfigureChecks.cmake0000644000175000017500000000403711542263760013463 00000000000000INCLUDE(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) yasm-1.3.0/x86insn_nasm.gperf0000664000175000017500000030344012371621515012776 00000000000000/* 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 yasm-1.3.0/AUTHORS0000644000175000017500000000010111542263760010453 00000000000000Peter Johnson Michael Urman yasm-1.3.0/test_hd.c0000644000175000017500000000374111626275017011217 00000000000000/* * * 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; } yasm-1.3.0/README0000644000175000017500000000000011542263760010261 00000000000000yasm-1.3.0/genstring.c0000644000175000017500000000612611626275017011565 00000000000000/* * * 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; } yasm-1.3.0/po/0000775000175000017500000000000012372060147010107 500000000000000yasm-1.3.0/po/Makefile.in.in0000664000175000017500000004042312371736127012513 00000000000000# 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: yasm-1.3.0/po/remove-potcdate.sin0000644000175000017500000000066012371724710013642 00000000000000# 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 } yasm-1.3.0/po/Rules-quot0000664000175000017500000000341112371736127012040 00000000000000# 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 yasm-1.3.0/po/boldquot.sed0000644000175000017500000000033112371724710012352 00000000000000s/"\([^"]*\)"/“\1â€/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“â€/""/g s/“/“/g s/â€/â€/g s/‘/‘/g s/’/’/g yasm-1.3.0/po/Makevars0000664000175000017500000000451012371736127011532 00000000000000# 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 = yasm-1.3.0/po/yasm.pot0000664000175000017500000016405212372052013011525 00000000000000# 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 "" yasm-1.3.0/po/stamp-po0000664000175000017500000000001212372052013011474 00000000000000timestamp yasm-1.3.0/po/insert-header.sin0000644000175000017500000000124012371724710013271 00000000000000# 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 } yasm-1.3.0/po/ChangeLog0000664000175000017500000000035412371736127011612 000000000000002014-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. yasm-1.3.0/po/quot.sed0000644000175000017500000000023112371724710011510 00000000000000s/"\([^"]*\)"/“\1â€/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“â€/""/g yasm-1.3.0/po/POTFILES.in0000644000175000017500000000326611626275017011616 00000000000000# 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 yasm-1.3.0/po/en@boldquot.header0000644000175000017500000000247112371724710013461 00000000000000# 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. # yasm-1.3.0/po/en@quot.header0000644000175000017500000000226312371724710012617 00000000000000# 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. # yasm-1.3.0/configure.ac0000664000175000017500000002151112371736127011706 00000000000000# 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 yasm-1.3.0/COPYING0000664000175000017500000000407212371726064010455 00000000000000Yasm 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 yasm-1.3.0/aclocal.m40000664000175000017500000015535412371736151011272 00000000000000# 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]) yasm-1.3.0/libyasm.h0000644000175000017500000000450611626275017011232 00000000000000/** * \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 yasm-1.3.0/YASM-VERSION-GEN.sh0000775000175000017500000000146012372060114012246 00000000000000#!/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 } yasm-1.3.0/GNU_GPL-2.00000644000175000017500000004313311542263760010772 00000000000000 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. yasm-1.3.0/m4/0000775000175000017500000000000012372060147010011 500000000000000yasm-1.3.0/m4/lib-ld.m40000664000175000017500000000714312371736127011352 00000000000000# 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 , 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 ]) yasm-1.3.0/m4/longdouble.m40000644000175000017500000000205311542263760012327 00000000000000# 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 ]) yasm-1.3.0/m4/po.m40000664000175000017500000004504112371736127010624 00000000000000# 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" <, 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], []) yasm-1.3.0/m4/Makefile.inc0000644000175000017500000000153211542263760012144 00000000000000EXTRA_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 yasm-1.3.0/m4/cython.m40000664000175000017500000000165712333771162011513 00000000000000dnl 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])]) yasm-1.3.0/m4/ulonglong.m40000644000175000017500000000161511542263760012204 00000000000000# 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 ]) yasm-1.3.0/m4/signed.m40000644000175000017500000000115411542263760011447 00000000000000# 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 ]) yasm-1.3.0/m4/ax_create_stdint_h.m40000644000175000017500000005544211542263760014036 00000000000000dnl @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" ]) ]) yasm-1.3.0/m4/lib-link.m40000664000175000017500000010044312371736127011705 00000000000000# lib-link.m4 serial 26 (gettext-0.18.2) dnl Copyright (C) 2001-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_PREREQ([2.54]) dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and dnl augments the CPPFLAGS variable. dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) pushdef([Name],[m4_translit([$1],[./+-], [____])]) pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ AC_LIB_LINKFLAGS_BODY([$1], [$2]) ac_cv_lib[]Name[]_libs="$LIB[]NAME" ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" ac_cv_lib[]Name[]_cppflags="$INC[]NAME" ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX" ]) LIB[]NAME="$ac_cv_lib[]Name[]_libs" LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" INC[]NAME="$ac_cv_lib[]Name[]_cppflags" LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) AC_SUBST([LIB]NAME[_PREFIX]) dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the dnl results of this search when this library appears as a dependency. HAVE_LIB[]NAME=yes popdef([NAME]) popdef([Name]) ]) dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode, [missing-message]) dnl searches for libname and the libraries corresponding to explicit and dnl implicit dependencies, together with the specified include files and dnl the ability to compile and link the specified testcode. The missing-message dnl defaults to 'no' and may contain additional hints for the user. dnl If found, it sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} dnl and LTLIB${NAME} variables and augments the CPPFLAGS variable, and dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) pushdef([Name],[m4_translit([$1],[./+-], [____])]) pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME dnl accordingly. AC_LIB_LINKFLAGS_BODY([$1], [$2]) dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, dnl because if the user has installed lib[]Name and not disabled its use dnl via --without-lib[]Name-prefix, he wants to use it. ac_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ ac_save_LIBS="$LIBS" dnl If $LIB[]NAME contains some -l options, add it to the end of LIBS, dnl because these -l options might require -L options that are present in dnl LIBS. -l options benefit only from the -L options listed before it. dnl Otherwise, add it to the front of LIBS, because it may be a static dnl library that depends on another static library that is present in LIBS. dnl Static libraries benefit only from the static libraries listed after dnl it. case " $LIB[]NAME" in *" -l"*) LIBS="$LIBS $LIB[]NAME" ;; *) LIBS="$LIB[]NAME $LIBS" ;; esac AC_LINK_IFELSE( [AC_LANG_PROGRAM([[$3]], [[$4]])], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name='m4_if([$5], [], [no], [[$5]])']) LIBS="$ac_save_LIBS" ]) if test "$ac_cv_lib[]Name" = yes; then HAVE_LIB[]NAME=yes AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the lib][$1 library.]) AC_MSG_CHECKING([how to link with lib[]$1]) AC_MSG_RESULT([$LIB[]NAME]) else HAVE_LIB[]NAME=no dnl If $LIB[]NAME didn't lead to a usable library, we don't need dnl $INC[]NAME either. CPPFLAGS="$ac_save_CPPFLAGS" LIB[]NAME= LTLIB[]NAME= LIB[]NAME[]_PREFIX= fi AC_SUBST([HAVE_LIB]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) AC_SUBST([LIB]NAME[_PREFIX]) popdef([NAME]) popdef([Name]) ]) dnl Determine the platform dependent parameters needed to use rpath: dnl acl_libext, dnl acl_shlibext, dnl acl_libname_spec, dnl acl_library_names_spec, dnl acl_hardcode_libdir_flag_spec, dnl acl_hardcode_libdir_separator, dnl acl_hardcode_direct, dnl acl_hardcode_minus_L. AC_DEFUN([AC_LIB_RPATH], [ dnl Tell automake >= 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]) ]) yasm-1.3.0/m4/wint_t.m40000644000175000017500000000130411542263760011477 00000000000000# 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 ]) yasm-1.3.0/m4/glibc21.m40000644000175000017500000000144511542263760011424 00000000000000# 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" ] ) yasm-1.3.0/m4/lib-prefix.m40000664000175000017500000002042212371736127012243 00000000000000# 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" ]) yasm-1.3.0/m4/xsize.m40000644000175000017500000000064511542263760011344 00000000000000# 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) ]) yasm-1.3.0/m4/inttypes-pri.m40000644000175000017500000000200211542263760012636 00000000000000# 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 ]) yasm-1.3.0/m4/codeset.m40000644000175000017500000000135111542263760011623 00000000000000# 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 ]) yasm-1.3.0/m4/wchar_t.m40000644000175000017500000000132611542263760011626 00000000000000# 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 ]) yasm-1.3.0/m4/uintmax_t.m40000644000175000017500000000207611542263760012212 00000000000000# 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 ]) yasm-1.3.0/m4/stdint_h.m40000644000175000017500000000157311542263760012017 00000000000000# 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 ]) yasm-1.3.0/m4/intmax.m40000644000175000017500000000174611542263760011505 00000000000000# 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 ]) yasm-1.3.0/m4/isc-posix.m40000644000175000017500000000170611542263760012117 00000000000000# 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"]) ] ) yasm-1.3.0/m4/iconv.m40000664000175000017500000002162012371736127011321 00000000000000# 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 ]) yasm-1.3.0/m4/lcmessage.m40000644000175000017500000000240411542263760012140 00000000000000# 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 ]) yasm-1.3.0/m4/nls.m40000664000175000017500000000231512371736127010777 00000000000000# 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]) ]) yasm-1.3.0/m4/inttypes.m40000644000175000017500000000147211542263760012060 00000000000000# 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 ]) yasm-1.3.0/m4/longlong.m40000644000175000017500000000141611542263760012016 00000000000000# 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 ]) yasm-1.3.0/m4/size_max.m40000644000175000017500000000364511542263760012024 00000000000000# 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 ]) yasm-1.3.0/m4/pythonhead.m40000644000175000017500000000162011542263760012337 00000000000000dnl 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" ]) yasm-1.3.0/m4/inttypes_h.m40000644000175000017500000000162311542263760012365 00000000000000# 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 ]) yasm-1.3.0/m4/intdiv0.m40000644000175000017500000000334011542263760011552 00000000000000# 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.]) ]) yasm-1.3.0/m4/printf-posix.m40000644000175000017500000000266111542263760012644 00000000000000# printf-posix.m4 serial 2 (gettext-0.13.1) 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 the printf() function supports POSIX/XSI format strings with dnl positions. AC_DEFUN([gt_PRINTF_POSIX], [ AC_REQUIRE([AC_PROG_CC]) AC_CACHE_CHECK([whether printf() supports POSIX/XSI format strings], gt_cv_func_printf_posix, [ AC_TRY_RUN([ #include #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 ]) yasm-1.3.0/BSD.txt0000644000175000017500000001037011542263760010565 00000000000000Redistribution 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. yasm-1.3.0/out_test.sh0000755000175000017500000000632311626275017011625 00000000000000#! /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 yasm-1.3.0/Artistic.txt0000644000175000017500000001373711542263760011751 00000000000000 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 yasm-1.3.0/config/0000775000175000017500000000000012372060145010734 500000000000000yasm-1.3.0/config/missing0000755000175000017500000001533012261335263012256 00000000000000#! /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: yasm-1.3.0/config/config.rpath0000775000175000017500000004443512371736127013207 00000000000000#! /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. # 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: yasm-1.3.0/config/install-sh0000755000175000017500000003325512261335263012671 00000000000000#!/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: yasm-1.3.0/config/compile0000755000175000017500000001624512261335263012243 00000000000000#! /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: yasm-1.3.0/config/config.sub0000664000175000017500000010532712333771162012651 00000000000000#! /bin/sh # Configuration validation subroutine script. # 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-04-18' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # 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. # 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: yasm-1.3.0/config/depcomp0000755000175000017500000005601612261335263012242 00000000000000#! /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: yasm-1.3.0/config/mkinstalldirs0000755000175000017500000000664711542263760013503 00000000000000#! /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: yasm-1.3.0/config/config.guess0000664000175000017500000012743212333771162013207 00000000000000#! /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: yasm-1.3.0/yasm_objfmts.70000664000175000017500000001062312334021305012167 00000000000000'\" 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 yasm-1.3.0/ABOUT-NLS0000664000175000017500000026713312371736127010663 000000000000001 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.