[newlib-cygwin] Cygwin: vendor libudis86 1.7.2/libudis86
Jeremy Drake
jeremyd2019@sourceware.org
Mon Mar 31 22:40:24 GMT 2025
https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=2a35e0ca14e8cd9b1bc5a79ee341d10720269103
commit 2a35e0ca14e8cd9b1bc5a79ee341d10720269103
Author: Jeremy Drake <cygwin@jdrake.com>
Date: Wed Mar 26 12:48:04 2025 -0700
Cygwin: vendor libudis86 1.7.2/libudis86
This does not include the source files responsible for generating AT&T-
or Intel-syntax assembly output, or upstream's Makefile.{am,in}.
Signed-off-by: Jeremy Drake <cygwin@jdrake.com>
Diff:
---
winsup/cygwin/udis86/decode.c | 1112 ++++++
winsup/cygwin/udis86/decode.h | 195 +
winsup/cygwin/udis86/extern.h | 105 +
winsup/cygwin/udis86/itab.c | 8401 +++++++++++++++++++++++++++++++++++++++++
winsup/cygwin/udis86/itab.h | 678 ++++
winsup/cygwin/udis86/types.h | 250 ++
winsup/cygwin/udis86/udint.h | 89 +
winsup/cygwin/udis86/udis86.c | 457 +++
8 files changed, 11287 insertions(+)
diff --git a/winsup/cygwin/udis86/decode.c b/winsup/cygwin/udis86/decode.c
new file mode 100644
index 000000000..b4efa778c
--- /dev/null
+++ b/winsup/cygwin/udis86/decode.c
@@ -0,0 +1,1112 @@
+/* udis86 - libudis86/decode.c
+ *
+ * Copyright (c) 2002-2009 Vivek Thampi
+ * 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.
+ */
+#include "udint.h"
+#include "types.h"
+#include "decode.h"
+
+#ifndef __UD_STANDALONE__
+# include <string.h>
+#endif /* __UD_STANDALONE__ */
+
+/* The max number of prefixes to an instruction */
+#define MAX_PREFIXES 15
+
+/* rex prefix bits */
+#define REX_W(r) ( ( 0xF & ( r ) ) >> 3 )
+#define REX_R(r) ( ( 0x7 & ( r ) ) >> 2 )
+#define REX_X(r) ( ( 0x3 & ( r ) ) >> 1 )
+#define REX_B(r) ( ( 0x1 & ( r ) ) >> 0 )
+#define REX_PFX_MASK(n) ( ( P_REXW(n) << 3 ) | \
+ ( P_REXR(n) << 2 ) | \
+ ( P_REXX(n) << 1 ) | \
+ ( P_REXB(n) << 0 ) )
+
+/* scable-index-base bits */
+#define SIB_S(b) ( ( b ) >> 6 )
+#define SIB_I(b) ( ( ( b ) >> 3 ) & 7 )
+#define SIB_B(b) ( ( b ) & 7 )
+
+/* modrm bits */
+#define MODRM_REG(b) ( ( ( b ) >> 3 ) & 7 )
+#define MODRM_NNN(b) ( ( ( b ) >> 3 ) & 7 )
+#define MODRM_MOD(b) ( ( ( b ) >> 6 ) & 3 )
+#define MODRM_RM(b) ( ( b ) & 7 )
+
+static int decode_ext(struct ud *u, uint16_t ptr);
+
+enum reg_class { /* register classes */
+ REGCLASS_GPR,
+ REGCLASS_MMX,
+ REGCLASS_CR,
+ REGCLASS_DB,
+ REGCLASS_SEG,
+ REGCLASS_XMM
+};
+
+ /*
+ * inp_start
+ * Should be called before each de-code operation.
+ */
+static void
+inp_start(struct ud *u)
+{
+ u->inp_ctr = 0;
+}
+
+
+static uint8_t
+inp_next(struct ud *u)
+{
+ if (u->inp_end == 0) {
+ if (u->inp_buf != NULL) {
+ if (u->inp_buf_index < u->inp_buf_size) {
+ u->inp_ctr++;
+ return (u->inp_curr = u->inp_buf[u->inp_buf_index++]);
+ }
+ } else {
+ int c;
+ if ((c = u->inp_hook(u)) != UD_EOI) {
+ u->inp_curr = c;
+ u->inp_sess[u->inp_ctr++] = u->inp_curr;
+ return u->inp_curr;
+ }
+ }
+ }
+ u->inp_end = 1;
+ UDERR(u, "byte expected, eoi received\n");
+ return 0;
+}
+
+static uint8_t
+inp_curr(struct ud *u)
+{
+ return u->inp_curr;
+}
+
+
+/*
+ * inp_uint8
+ * int_uint16
+ * int_uint32
+ * int_uint64
+ * Load little-endian values from input
+ */
+static uint8_t
+inp_uint8(struct ud* u)
+{
+ return inp_next(u);
+}
+
+static uint16_t
+inp_uint16(struct ud* u)
+{
+ uint16_t r, ret;
+
+ ret = inp_next(u);
+ r = inp_next(u);
+ return ret | (r << 8);
+}
+
+static uint32_t
+inp_uint32(struct ud* u)
+{
+ uint32_t r, ret;
+
+ ret = inp_next(u);
+ r = inp_next(u);
+ ret = ret | (r << 8);
+ r = inp_next(u);
+ ret = ret | (r << 16);
+ r = inp_next(u);
+ return ret | (r << 24);
+}
+
+static uint64_t
+inp_uint64(struct ud* u)
+{
+ uint64_t r, ret;
+
+ ret = inp_next(u);
+ r = inp_next(u);
+ ret = ret | (r << 8);
+ r = inp_next(u);
+ ret = ret | (r << 16);
+ r = inp_next(u);
+ ret = ret | (r << 24);
+ r = inp_next(u);
+ ret = ret | (r << 32);
+ r = inp_next(u);
+ ret = ret | (r << 40);
+ r = inp_next(u);
+ ret = ret | (r << 48);
+ r = inp_next(u);
+ return ret | (r << 56);
+}
+
+
+static inline int
+eff_opr_mode(int dis_mode, int rex_w, int pfx_opr)
+{
+ if (dis_mode == 64) {
+ return rex_w ? 64 : (pfx_opr ? 16 : 32);
+ } else if (dis_mode == 32) {
+ return pfx_opr ? 16 : 32;
+ } else {
+ UD_ASSERT(dis_mode == 16);
+ return pfx_opr ? 32 : 16;
+ }
+}
+
+
+static inline int
+eff_adr_mode(int dis_mode, int pfx_adr)
+{
+ if (dis_mode == 64) {
+ return pfx_adr ? 32 : 64;
+ } else if (dis_mode == 32) {
+ return pfx_adr ? 16 : 32;
+ } else {
+ UD_ASSERT(dis_mode == 16);
+ return pfx_adr ? 32 : 16;
+ }
+}
+
+
+/*
+ * decode_prefixes
+ *
+ * Extracts instruction prefixes.
+ */
+static int
+decode_prefixes(struct ud *u)
+{
+ int done = 0;
+ uint8_t curr, last = 0;
+ UD_RETURN_ON_ERROR(u);
+
+ do {
+ last = curr;
+ curr = inp_next(u);
+ UD_RETURN_ON_ERROR(u);
+ if (u->inp_ctr == MAX_INSN_LENGTH) {
+ UD_RETURN_WITH_ERROR(u, "max instruction length");
+ }
+
+ switch (curr)
+ {
+ case 0x2E:
+ u->pfx_seg = UD_R_CS;
+ break;
+ case 0x36:
+ u->pfx_seg = UD_R_SS;
+ break;
+ case 0x3E:
+ u->pfx_seg = UD_R_DS;
+ break;
+ case 0x26:
+ u->pfx_seg = UD_R_ES;
+ break;
+ case 0x64:
+ u->pfx_seg = UD_R_FS;
+ break;
+ case 0x65:
+ u->pfx_seg = UD_R_GS;
+ break;
+ case 0x67: /* adress-size override prefix */
+ u->pfx_adr = 0x67;
+ break;
+ case 0xF0:
+ u->pfx_lock = 0xF0;
+ break;
+ case 0x66:
+ u->pfx_opr = 0x66;
+ break;
+ case 0xF2:
+ u->pfx_str = 0xf2;
+ break;
+ case 0xF3:
+ u->pfx_str = 0xf3;
+ break;
+ default:
+ /* consume if rex */
+ done = (u->dis_mode == 64 && (curr & 0xF0) == 0x40) ? 0 : 1;
+ break;
+ }
+ } while (!done);
+ /* rex prefixes in 64bit mode, must be the last prefix */
+ if (u->dis_mode == 64 && (last & 0xF0) == 0x40) {
+ u->pfx_rex = last;
+ }
+ return 0;
+}
+
+
+static inline unsigned int modrm( struct ud * u )
+{
+ if ( !u->have_modrm ) {
+ u->modrm = inp_next( u );
+ u->have_modrm = 1;
+ }
+ return u->modrm;
+}
+
+
+static unsigned int
+resolve_operand_size( const struct ud * u, unsigned int s )
+{
+ switch ( s )
+ {
+ case SZ_V:
+ return ( u->opr_mode );
+ case SZ_Z:
+ return ( u->opr_mode == 16 ) ? 16 : 32;
+ case SZ_Y:
+ return ( u->opr_mode == 16 ) ? 32 : u->opr_mode;
+ case SZ_RDQ:
+ return ( u->dis_mode == 64 ) ? 64 : 32;
+ default:
+ return s;
+ }
+}
+
+
+static int resolve_mnemonic( struct ud* u )
+{
+ /* resolve 3dnow weirdness. */
+ if ( u->mnemonic == UD_I3dnow ) {
+ u->mnemonic = ud_itab[ u->le->table[ inp_curr( u ) ] ].mnemonic;
+ }
+ /* SWAPGS is only valid in 64bits mode */
+ if ( u->mnemonic == UD_Iswapgs && u->dis_mode != 64 ) {
+ UDERR(u, "swapgs invalid in 64bits mode\n");
+ return -1;
+ }
+
+ if (u->mnemonic == UD_Ixchg) {
+ if ((u->operand[0].type == UD_OP_REG && u->operand[0].base == UD_R_AX &&
+ u->operand[1].type == UD_OP_REG && u->operand[1].base == UD_R_AX) ||
+ (u->operand[0].type == UD_OP_REG && u->operand[0].base == UD_R_EAX &&
+ u->operand[1].type == UD_OP_REG && u->operand[1].base == UD_R_EAX)) {
+ u->operand[0].type = UD_NONE;
+ u->operand[1].type = UD_NONE;
+ u->mnemonic = UD_Inop;
+ }
+ }
+
+ if (u->mnemonic == UD_Inop && u->pfx_repe) {
+ u->pfx_repe = 0;
+ u->mnemonic = UD_Ipause;
+ }
+ return 0;
+}
+
+
+/* -----------------------------------------------------------------------------
+ * decode_a()- Decodes operands of the type seg:offset
+ * -----------------------------------------------------------------------------
+ */
+static void
+decode_a(struct ud* u, struct ud_operand *op)
+{
+ if (u->opr_mode == 16) {
+ /* seg16:off16 */
+ op->type = UD_OP_PTR;
+ op->size = 32;
+ op->lval.ptr.off = inp_uint16(u);
+ op->lval.ptr.seg = inp_uint16(u);
+ } else {
+ /* seg16:off32 */
+ op->type = UD_OP_PTR;
+ op->size = 48;
+ op->lval.ptr.off = inp_uint32(u);
+ op->lval.ptr.seg = inp_uint16(u);
+ }
+}
+
+/* -----------------------------------------------------------------------------
+ * decode_gpr() - Returns decoded General Purpose Register
+ * -----------------------------------------------------------------------------
+ */
+static enum ud_type
+decode_gpr(register struct ud* u, unsigned int s, unsigned char rm)
+{
+ switch (s) {
+ case 64:
+ return UD_R_RAX + rm;
+ case 32:
+ return UD_R_EAX + rm;
+ case 16:
+ return UD_R_AX + rm;
+ case 8:
+ if (u->dis_mode == 64 && u->pfx_rex) {
+ if (rm >= 4)
+ return UD_R_SPL + (rm-4);
+ return UD_R_AL + rm;
+ } else return UD_R_AL + rm;
+ case 0:
+ /* invalid size in case of a decode error */
+ UD_ASSERT(u->error);
+ return UD_NONE;
+ default:
+ UD_ASSERT(!"invalid operand size");
+ return UD_NONE;
+ }
+}
+
+static void
+decode_reg(struct ud *u,
+ struct ud_operand *opr,
+ int type,
+ int num,
+ int size)
+{
+ int reg;
+ size = resolve_operand_size(u, size);
+ switch (type) {
+ case REGCLASS_GPR : reg = decode_gpr(u, size, num); break;
+ case REGCLASS_MMX : reg = UD_R_MM0 + (num & 7); break;
+ case REGCLASS_XMM : reg = UD_R_XMM0 + num; break;
+ case REGCLASS_CR : reg = UD_R_CR0 + num; break;
+ case REGCLASS_DB : reg = UD_R_DR0 + num; break;
+ case REGCLASS_SEG : {
+ /*
+ * Only 6 segment registers, anything else is an error.
+ */
+ if ((num & 7) > 5) {
+ UDERR(u, "invalid segment register value\n");
+ return;
+ } else {
+ reg = UD_R_ES + (num & 7);
+ }
+ break;
+ }
+ default:
+ UD_ASSERT(!"invalid register type");
+ return;
+ }
+ opr->type = UD_OP_REG;
+ opr->base = reg;
+ opr->size = size;
+}
+
+
+/*
+ * decode_imm
+ *
+ * Decode Immediate values.
+ */
+static void
+decode_imm(struct ud* u, unsigned int size, struct ud_operand *op)
+{
+ op->size = resolve_operand_size(u, size);
+ op->type = UD_OP_IMM;
+
+ switch (op->size) {
+ case 8: op->lval.sbyte = inp_uint8(u); break;
+ case 16: op->lval.uword = inp_uint16(u); break;
+ case 32: op->lval.udword = inp_uint32(u); break;
+ case 64: op->lval.uqword = inp_uint64(u); break;
+ default: return;
+ }
+}
+
+
+/*
+ * decode_mem_disp
+ *
+ * Decode mem address displacement.
+ */
+static void
+decode_mem_disp(struct ud* u, unsigned int size, struct ud_operand *op)
+{
+ switch (size) {
+ case 8:
+ op->offset = 8;
+ op->lval.ubyte = inp_uint8(u);
+ break;
+ case 16:
+ op->offset = 16;
+ op->lval.uword = inp_uint16(u);
+ break;
+ case 32:
+ op->offset = 32;
+ op->lval.udword = inp_uint32(u);
+ break;
+ case 64:
+ op->offset = 64;
+ op->lval.uqword = inp_uint64(u);
+ break;
+ default:
+ return;
+ }
+}
+
+
+/*
+ * decode_modrm_reg
+ *
+ * Decodes reg field of mod/rm byte
+ *
+ */
+static inline void
+decode_modrm_reg(struct ud *u,
+ struct ud_operand *operand,
+ unsigned int type,
+ unsigned int size)
+{
+ uint8_t reg = (REX_R(u->pfx_rex) << 3) | MODRM_REG(modrm(u));
+ decode_reg(u, operand, type, reg, size);
+}
+
+
+/*
+ * decode_modrm_rm
+ *
+ * Decodes rm field of mod/rm byte
+ *
+ */
+static void
+decode_modrm_rm(struct ud *u,
+ struct ud_operand *op,
+ unsigned char type, /* register type */
+ unsigned int size) /* operand size */
+
+{
+ size_t offset = 0;
+ unsigned char mod, rm;
+
+ /* get mod, r/m and reg fields */
+ mod = MODRM_MOD(modrm(u));
+ rm = (REX_B(u->pfx_rex) << 3) | MODRM_RM(modrm(u));
+
+ /*
+ * If mod is 11b, then the modrm.rm specifies a register.
+ *
+ */
+ if (mod == 3) {
+ decode_reg(u, op, type, rm, size);
+ return;
+ }
+
+ /*
+ * !11b => Memory Address
+ */
+ op->type = UD_OP_MEM;
+ op->size = resolve_operand_size(u, size);
+
+ if (u->adr_mode == 64) {
+ op->base = UD_R_RAX + rm;
+ if (mod == 1) {
+ offset = 8;
+ } else if (mod == 2) {
+ offset = 32;
+ } else if (mod == 0 && (rm & 7) == 5) {
+ op->base = UD_R_RIP;
+ offset = 32;
+ } else {
+ offset = 0;
+ }
+ /*
+ * Scale-Index-Base (SIB)
+ */
+ if ((rm & 7) == 4) {
+ inp_next(u);
+
+ op->scale = (1 << SIB_S(inp_curr(u))) & ~1;
+ op->index = UD_R_RAX + (SIB_I(inp_curr(u)) | (REX_X(u->pfx_rex) << 3));
+ op->base = UD_R_RAX + (SIB_B(inp_curr(u)) | (REX_B(u->pfx_rex) << 3));
+
+ /* special conditions for base reference */
+ if (op->index == UD_R_RSP) {
+ op->index = UD_NONE;
+ op->scale = UD_NONE;
+ }
+
+ if (op->base == UD_R_RBP || op->base == UD_R_R13) {
+ if (mod == 0) {
+ op->base = UD_NONE;
+ }
+ if (mod == 1) {
+ offset = 8;
+ } else {
+ offset = 32;
+ }
+ }
+ }
+ } else if (u->adr_mode == 32) {
+ op->base = UD_R_EAX + rm;
+ if (mod == 1) {
+ offset = 8;
+ } else if (mod == 2) {
+ offset = 32;
+ } else if (mod == 0 && rm == 5) {
+ op->base = UD_NONE;
+ offset = 32;
+ } else {
+ offset = 0;
+ }
+
+ /* Scale-Index-Base (SIB) */
+ if ((rm & 7) == 4) {
+ inp_next(u);
+
+ op->scale = (1 << SIB_S(inp_curr(u))) & ~1;
+ op->index = UD_R_EAX + (SIB_I(inp_curr(u)) | (REX_X(u->pfx_rex) << 3));
+ op->base = UD_R_EAX + (SIB_B(inp_curr(u)) | (REX_B(u->pfx_rex) << 3));
+
+ if (op->index == UD_R_ESP) {
+ op->index = UD_NONE;
+ op->scale = UD_NONE;
+ }
+
+ /* special condition for base reference */
+ if (op->base == UD_R_EBP) {
+ if (mod == 0) {
+ op->base = UD_NONE;
+ }
+ if (mod == 1) {
+ offset = 8;
+ } else {
+ offset = 32;
+ }
+ }
+ }
+ } else {
+ const unsigned int bases[] = { UD_R_BX, UD_R_BX, UD_R_BP, UD_R_BP,
+ UD_R_SI, UD_R_DI, UD_R_BP, UD_R_BX };
+ const unsigned int indices[] = { UD_R_SI, UD_R_DI, UD_R_SI, UD_R_DI,
+ UD_NONE, UD_NONE, UD_NONE, UD_NONE };
+ op->base = bases[rm & 7];
+ op->index = indices[rm & 7];
+ if (mod == 0 && rm == 6) {
+ offset = 16;
+ op->base = UD_NONE;
+ } else if (mod == 1) {
+ offset = 8;
+ } else if (mod == 2) {
+ offset = 16;
+ }
+ }
+
+ if (offset) {
+ decode_mem_disp(u, offset, op);
+ }
+}
+
+
+/*
+ * decode_moffset
+ * Decode offset-only memory operand
+ */
+static void
+decode_moffset(struct ud *u, unsigned int size, struct ud_operand *opr)
+{
+ opr->type = UD_OP_MEM;
+ opr->size = resolve_operand_size(u, size);
+ decode_mem_disp(u, u->adr_mode, opr);
+}
+
+
+/* -----------------------------------------------------------------------------
+ * decode_operands() - Disassembles Operands.
+ * -----------------------------------------------------------------------------
+ */
+static int
+decode_operand(struct ud *u,
+ struct ud_operand *operand,
+ enum ud_operand_code type,
+ unsigned int size)
+{
+ operand->_oprcode = type;
+
+ switch (type) {
+ case OP_A :
+ decode_a(u, operand);
+ break;
+ case OP_MR:
+ decode_modrm_rm(u, operand, REGCLASS_GPR,
+ MODRM_MOD(modrm(u)) == 3 ?
+ Mx_reg_size(size) : Mx_mem_size(size));
+ break;
+ case OP_F:
+ u->br_far = 1;
+ /* intended fall through */
+ case OP_M:
+ if (MODRM_MOD(modrm(u)) == 3) {
+ UDERR(u, "expected modrm.mod != 3\n");
+ }
+ /* intended fall through */
+ case OP_E:
+ decode_modrm_rm(u, operand, REGCLASS_GPR, size);
+ break;
+ case OP_G:
+ decode_modrm_reg(u, operand, REGCLASS_GPR, size);
+ break;
+ case OP_sI:
+ case OP_I:
+ decode_imm(u, size, operand);
+ break;
+ case OP_I1:
+ operand->type = UD_OP_CONST;
+ operand->lval.udword = 1;
+ break;
+ case OP_N:
+ if (MODRM_MOD(modrm(u)) != 3) {
+ UDERR(u, "expected modrm.mod == 3\n");
+ }
+ /* intended fall through */
+ case OP_Q:
+ decode_modrm_rm(u, operand, REGCLASS_MMX, size);
+ break;
+ case OP_P:
+ decode_modrm_reg(u, operand, REGCLASS_MMX, size);
+ break;
+ case OP_U:
+ if (MODRM_MOD(modrm(u)) != 3) {
+ UDERR(u, "expected modrm.mod == 3\n");
+ }
+ /* intended fall through */
+ case OP_W:
+ decode_modrm_rm(u, operand, REGCLASS_XMM, size);
+ break;
+ case OP_V:
+ decode_modrm_reg(u, operand, REGCLASS_XMM, size);
+ break;
+ case OP_MU:
+ decode_modrm_rm(u, operand, REGCLASS_XMM,
+ MODRM_MOD(modrm(u)) == 3 ?
+ Mx_reg_size(size) : Mx_mem_size(size));
+ break;
+ case OP_S:
+ decode_modrm_reg(u, operand, REGCLASS_SEG, size);
+ break;
+ case OP_O:
+ decode_moffset(u, size, operand);
+ break;
+ case OP_R0:
+ case OP_R1:
+ case OP_R2:
+ case OP_R3:
+ case OP_R4:
+ case OP_R5:
+ case OP_R6:
+ case OP_R7:
+ decode_reg(u, operand, REGCLASS_GPR,
+ (REX_B(u->pfx_rex) << 3) | (type - OP_R0), size);
+ break;
+ case OP_AL:
+ case OP_AX:
+ case OP_eAX:
+ case OP_rAX:
+ decode_reg(u, operand, REGCLASS_GPR, 0, size);
+ break;
+ case OP_CL:
+ case OP_CX:
+ case OP_eCX:
+ decode_reg(u, operand, REGCLASS_GPR, 1, size);
+ break;
+ case OP_DL:
+ case OP_DX:
+ case OP_eDX:
+ decode_reg(u, operand, REGCLASS_GPR, 2, size);
+ break;
+ case OP_ES:
+ case OP_CS:
+ case OP_DS:
+ case OP_SS:
+ case OP_FS:
+ case OP_GS:
+ /* in 64bits mode, only fs and gs are allowed */
+ if (u->dis_mode == 64) {
+ if (type != OP_FS && type != OP_GS) {
+ UDERR(u, "invalid segment register in 64bits\n");
+ }
+ }
+ operand->type = UD_OP_REG;
+ operand->base = (type - OP_ES) + UD_R_ES;
+ operand->size = 16;
+ break;
+ case OP_J :
+ decode_imm(u, size, operand);
+ operand->type = UD_OP_JIMM;
+ break ;
+ case OP_R :
+ if (MODRM_MOD(modrm(u)) != 3) {
+ UDERR(u, "expected modrm.mod == 3\n");
+ }
+ decode_modrm_rm(u, operand, REGCLASS_GPR, size);
+ break;
+ case OP_C:
+ decode_modrm_reg(u, operand, REGCLASS_CR, size);
+ break;
+ case OP_D:
+ decode_modrm_reg(u, operand, REGCLASS_DB, size);
+ break;
+ case OP_I3 :
+ operand->type = UD_OP_CONST;
+ operand->lval.sbyte = 3;
+ break;
+ case OP_ST0:
+ case OP_ST1:
+ case OP_ST2:
+ case OP_ST3:
+ case OP_ST4:
+ case OP_ST5:
+ case OP_ST6:
+ case OP_ST7:
+ operand->type = UD_OP_REG;
+ operand->base = (type - OP_ST0) + UD_R_ST0;
+ operand->size = 80;
+ break;
+ default :
+ break;
+ }
+ return 0;
+}
+
+
+/*
+ * decode_operands
+ *
+ * Disassemble upto 3 operands of the current instruction being
+ * disassembled. By the end of the function, the operand fields
+ * of the ud structure will have been filled.
+ */
+static int
+decode_operands(struct ud* u)
+{
+ decode_operand(u, &u->operand[0],
+ u->itab_entry->operand1.type,
+ u->itab_entry->operand1.size);
+ decode_operand(u, &u->operand[1],
+ u->itab_entry->operand2.type,
+ u->itab_entry->operand2.size);
+ decode_operand(u, &u->operand[2],
+ u->itab_entry->operand3.type,
+ u->itab_entry->operand3.size);
+ return 0;
+}
+
+/* -----------------------------------------------------------------------------
+ * clear_insn() - clear instruction structure
+ * -----------------------------------------------------------------------------
+ */
+static void
+clear_insn(register struct ud* u)
+{
+ u->error = 0;
+ u->pfx_seg = 0;
+ u->pfx_opr = 0;
+ u->pfx_adr = 0;
+ u->pfx_lock = 0;
+ u->pfx_repne = 0;
+ u->pfx_rep = 0;
+ u->pfx_repe = 0;
+ u->pfx_rex = 0;
+ u->pfx_str = 0;
+ u->mnemonic = UD_Inone;
+ u->itab_entry = NULL;
+ u->have_modrm = 0;
+ u->br_far = 0;
+
+ memset( &u->operand[ 0 ], 0, sizeof( struct ud_operand ) );
+ memset( &u->operand[ 1 ], 0, sizeof( struct ud_operand ) );
+ memset( &u->operand[ 2 ], 0, sizeof( struct ud_operand ) );
+}
+
+
+static inline int
+resolve_pfx_str(struct ud* u)
+{
+ if (u->pfx_str == 0xf3) {
+ if (P_STR(u->itab_entry->prefix)) {
+ u->pfx_rep = 0xf3;
+ } else {
+ u->pfx_repe = 0xf3;
+ }
+ } else if (u->pfx_str == 0xf2) {
+ u->pfx_repne = 0xf3;
+ }
+ return 0;
+}
+
+
+static int
+resolve_mode( struct ud* u )
+{
+ int default64;
+ /* if in error state, bail out */
+ if ( u->error ) return -1;
+
+ /* propagate prefix effects */
+ if ( u->dis_mode == 64 ) { /* set 64bit-mode flags */
+
+ /* Check validity of instruction m64 */
+ if ( P_INV64( u->itab_entry->prefix ) ) {
+ UDERR(u, "instruction invalid in 64bits\n");
+ return -1;
+ }
+
+ /* effective rex prefix is the effective mask for the
+ * instruction hard-coded in the opcode map.
+ */
+ u->pfx_rex = ( u->pfx_rex & 0x40 ) |
+ ( u->pfx_rex & REX_PFX_MASK( u->itab_entry->prefix ) );
+
+ /* whether this instruction has a default operand size of
+ * 64bit, also hardcoded into the opcode map.
+ */
+ default64 = P_DEF64( u->itab_entry->prefix );
+ /* calculate effective operand size */
+ if ( REX_W( u->pfx_rex ) ) {
+ u->opr_mode = 64;
+ } else if ( u->pfx_opr ) {
+ u->opr_mode = 16;
+ } else {
+ /* unless the default opr size of instruction is 64,
+ * the effective operand size in the absence of rex.w
+ * prefix is 32.
+ */
+ u->opr_mode = default64 ? 64 : 32;
+ }
+
+ /* calculate effective address size */
+ u->adr_mode = (u->pfx_adr) ? 32 : 64;
+ } else if ( u->dis_mode == 32 ) { /* set 32bit-mode flags */
+ u->opr_mode = ( u->pfx_opr ) ? 16 : 32;
+ u->adr_mode = ( u->pfx_adr ) ? 16 : 32;
+ } else if ( u->dis_mode == 16 ) { /* set 16bit-mode flags */
+ u->opr_mode = ( u->pfx_opr ) ? 32 : 16;
+ u->adr_mode = ( u->pfx_adr ) ? 32 : 16;
+ }
+
+ return 0;
+}
+
+
+static inline int
+decode_insn(struct ud *u, uint16_t ptr)
+{
+ UD_ASSERT((ptr & 0x8000) == 0);
+ u->itab_entry = &ud_itab[ ptr ];
+ u->mnemonic = u->itab_entry->mnemonic;
+ return (resolve_pfx_str(u) == 0 &&
+ resolve_mode(u) == 0 &&
+ decode_operands(u) == 0 &&
+ resolve_mnemonic(u) == 0) ? 0 : -1;
+}
+
+
+/*
+ * decode_3dnow()
+ *
+ * Decoding 3dnow is a little tricky because of its strange opcode
+ * structure. The final opcode disambiguation depends on the last
+ * byte that comes after the operands have been decoded. Fortunately,
+ * all 3dnow instructions have the same set of operand types. So we
+ * go ahead and decode the instruction by picking an arbitrarily chosen
+ * valid entry in the table, decode the operands, and read the final
+ * byte to resolve the menmonic.
+ */
+static inline int
+decode_3dnow(struct ud* u)
+{
+ uint16_t ptr;
+ UD_ASSERT(u->le->type == UD_TAB__OPC_3DNOW);
+ UD_ASSERT(u->le->table[0xc] != 0);
+ decode_insn(u, u->le->table[0xc]);
+ inp_next(u);
+ if (u->error) {
+ return -1;
+ }
+ ptr = u->le->table[inp_curr(u)];
+ UD_ASSERT((ptr & 0x8000) == 0);
+ u->mnemonic = ud_itab[ptr].mnemonic;
+ return 0;
+}
+
+
+static int
+decode_ssepfx(struct ud *u)
+{
+ uint8_t idx;
+ uint8_t pfx;
+
+ /*
+ * String prefixes (f2, f3) take precedence over operand
+ * size prefix (66).
+ */
+ pfx = u->pfx_str;
+ if (pfx == 0) {
+ pfx = u->pfx_opr;
+ }
+ idx = ((pfx & 0xf) + 1) / 2;
+ if (u->le->table[idx] == 0) {
+ idx = 0;
+ }
+ if (idx && u->le->table[idx] != 0) {
+ /*
+ * "Consume" the prefix as a part of the opcode, so it is no
+ * longer exported as an instruction prefix.
+ */
+ u->pfx_str = 0;
+ if (pfx == 0x66) {
+ /*
+ * consume "66" only if it was used for decoding, leaving
+ * it to be used as an operands size override for some
+ * simd instructions.
+ */
+ u->pfx_opr = 0;
+ }
+ }
+ return decode_ext(u, u->le->table[idx]);
+}
+
+
+/*
+ * decode_ext()
+ *
+ * Decode opcode extensions (if any)
+ */
+static int
+decode_ext(struct ud *u, uint16_t ptr)
+{
+ uint8_t idx = 0;
+ if ((ptr & 0x8000) == 0) {
+ return decode_insn(u, ptr);
+ }
+ u->le = &ud_lookup_table_list[(~0x8000 & ptr)];
+ if (u->le->type == UD_TAB__OPC_3DNOW) {
+ return decode_3dnow(u);
+ }
+
+ switch (u->le->type) {
+ case UD_TAB__OPC_MOD:
+ /* !11 = 0, 11 = 1 */
+ idx = (MODRM_MOD(modrm(u)) + 1) / 4;
+ break;
+ /* disassembly mode/operand size/address size based tables.
+ * 16 = 0,, 32 = 1, 64 = 2
+ */
+ case UD_TAB__OPC_MODE:
+ idx = u->dis_mode != 64 ? 0 : 1;
+ break;
+ case UD_TAB__OPC_OSIZE:
+ idx = eff_opr_mode(u->dis_mode, REX_W(u->pfx_rex), u->pfx_opr) / 32;
+ break;
+ case UD_TAB__OPC_ASIZE:
+ idx = eff_adr_mode(u->dis_mode, u->pfx_adr) / 32;
+ break;
+ case UD_TAB__OPC_X87:
+ idx = modrm(u) - 0xC0;
+ break;
+ case UD_TAB__OPC_VENDOR:
+ if (u->vendor == UD_VENDOR_ANY) {
+ /* choose a valid entry */
+ idx = (u->le->table[idx] != 0) ? 0 : 1;
+ } else if (u->vendor == UD_VENDOR_AMD) {
+ idx = 0;
+ } else {
+ idx = 1;
+ }
+ break;
+ case UD_TAB__OPC_RM:
+ idx = MODRM_RM(modrm(u));
+ break;
+ case UD_TAB__OPC_REG:
+ idx = MODRM_REG(modrm(u));
+ break;
+ case UD_TAB__OPC_SSE:
+ return decode_ssepfx(u);
+ default:
+ UD_ASSERT(!"not reached");
+ break;
+ }
+
+ return decode_ext(u, u->le->table[idx]);
+}
+
+
+static int
+decode_opcode(struct ud *u)
+{
+ uint16_t ptr;
+ UD_ASSERT(u->le->type == UD_TAB__OPC_TABLE);
+ UD_RETURN_ON_ERROR(u);
+ u->primary_opcode = inp_curr(u);
+ ptr = u->le->table[inp_curr(u)];
+ if (ptr & 0x8000) {
+ u->le = &ud_lookup_table_list[ptr & ~0x8000];
+ if (u->le->type == UD_TAB__OPC_TABLE) {
+ inp_next(u);
+ return decode_opcode(u);
+ }
+ }
+ return decode_ext(u, ptr);
+}
+
+
+/* =============================================================================
+ * ud_decode() - Instruction decoder. Returns the number of bytes decoded.
+ * =============================================================================
+ */
+unsigned int
+ud_decode(struct ud *u)
+{
+ inp_start(u);
+ clear_insn(u);
+ u->le = &ud_lookup_table_list[0];
+ u->error = decode_prefixes(u) == -1 ||
+ decode_opcode(u) == -1 ||
+ u->error;
+ /* Handle decode error. */
+ if (u->error) {
+ /* clear out the decode data. */
+ clear_insn(u);
+ /* mark the sequence of bytes as invalid. */
+ u->itab_entry = &ud_itab[0]; /* entry 0 is invalid */
+ u->mnemonic = u->itab_entry->mnemonic;
+ }
+
+ /* maybe this stray segment override byte
+ * should be spewed out?
+ */
+ if ( !P_SEG( u->itab_entry->prefix ) &&
+ u->operand[0].type != UD_OP_MEM &&
+ u->operand[1].type != UD_OP_MEM )
+ u->pfx_seg = 0;
+
+ u->insn_offset = u->pc; /* set offset of instruction */
+ u->asm_buf_fill = 0; /* set translation buffer index to 0 */
+ u->pc += u->inp_ctr; /* move program counter by bytes decoded */
+
+ /* return number of bytes disassembled. */
+ return u->inp_ctr;
+}
+
+/*
+vim: set ts=2 sw=2 expandtab
+*/
diff --git a/winsup/cygwin/udis86/decode.h b/winsup/cygwin/udis86/decode.h
new file mode 100644
index 000000000..a7362c84a
--- /dev/null
+++ b/winsup/cygwin/udis86/decode.h
@@ -0,0 +1,195 @@
+/* udis86 - libudis86/decode.h
+ *
+ * Copyright (c) 2002-2009 Vivek Thampi
+ * 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.
+ */
+#ifndef UD_DECODE_H
+#define UD_DECODE_H
+
+#include "types.h"
+#include "itab.h"
+
+#define MAX_INSN_LENGTH 15
+
+/* itab prefix bits */
+#define P_none ( 0 )
+#define P_cast ( 1 << 0 )
+#define P_CAST(n) ( ( n >> 0 ) & 1 )
+#define P_rexb ( 1 << 1 )
+#define P_REXB(n) ( ( n >> 1 ) & 1 )
+#define P_inv64 ( 1 << 4 )
+#define P_INV64(n) ( ( n >> 4 ) & 1 )
+#define P_rexw ( 1 << 5 )
+#define P_REXW(n) ( ( n >> 5 ) & 1 )
+#define P_def64 ( 1 << 7 )
+#define P_DEF64(n) ( ( n >> 7 ) & 1 )
+#define P_rexr ( 1 << 8 )
+#define P_REXR(n) ( ( n >> 8 ) & 1 )
+#define P_oso ( 1 << 9 )
+#define P_OSO(n) ( ( n >> 9 ) & 1 )
+#define P_aso ( 1 << 10 )
+#define P_ASO(n) ( ( n >> 10 ) & 1 )
+#define P_rexx ( 1 << 11 )
+#define P_REXX(n) ( ( n >> 11 ) & 1 )
+#define P_ImpAddr ( 1 << 12 )
+#define P_IMPADDR(n) ( ( n >> 12 ) & 1 )
+#define P_seg ( 1 << 13 )
+#define P_SEG(n) ( ( n >> 13 ) & 1 )
+#define P_str ( 1 << 14 )
+#define P_STR(n) ( ( n >> 14 ) & 1 )
+#define P_strz ( 1 << 15 )
+#define P_STR_ZF(n) ( ( n >> 15 ) & 1 )
+
+/* operand type constants -- order is important! */
+
+enum ud_operand_code {
+ OP_NONE,
+
+ OP_A, OP_E, OP_M, OP_G,
+ OP_I, OP_F,
+
+ OP_R0, OP_R1, OP_R2, OP_R3,
+ OP_R4, OP_R5, OP_R6, OP_R7,
+
+ OP_AL, OP_CL, OP_DL,
+ OP_AX, OP_CX, OP_DX,
+ OP_eAX, OP_eCX, OP_eDX,
+ OP_rAX, OP_rCX, OP_rDX,
+
+ OP_ES, OP_CS, OP_SS, OP_DS,
+ OP_FS, OP_GS,
+
+ OP_ST0, OP_ST1, OP_ST2, OP_ST3,
+ OP_ST4, OP_ST5, OP_ST6, OP_ST7,
+
+ OP_J, OP_S, OP_O,
+ OP_I1, OP_I3, OP_sI,
+
+ OP_V, OP_W, OP_Q, OP_P,
+ OP_U, OP_N, OP_MU,
+
+ OP_R, OP_C, OP_D,
+
+ OP_MR
+} UD_ATTR_PACKED;
+
+
+/* operand size constants */
+
+enum ud_operand_size {
+ SZ_NA = 0,
+ SZ_Z = 1,
+ SZ_V = 2,
+ SZ_RDQ = 7,
+
+ /* the following values are used as is,
+ * and thus hard-coded. changing them
+ * will break internals
+ */
+ SZ_B = 8,
+ SZ_W = 16,
+ SZ_D = 32,
+ SZ_Q = 64,
+ SZ_T = 80,
+ SZ_O = 128,
+
+ SZ_Y = 17,
+
+ /*
+ * complex size types, that encode sizes for operands
+ * of type MR (memory or register), for internal use
+ * only. Id space 256 and above.
+ */
+ SZ_BD = (SZ_B << 8) | SZ_D,
+ SZ_BV = (SZ_B << 8) | SZ_V,
+ SZ_WD = (SZ_W << 8) | SZ_D,
+ SZ_WV = (SZ_W << 8) | SZ_V,
+ SZ_WY = (SZ_W << 8) | SZ_Y,
+ SZ_DY = (SZ_D << 8) | SZ_Y,
+ SZ_WO = (SZ_W << 8) | SZ_O,
+ SZ_DO = (SZ_D << 8) | SZ_O,
+ SZ_QO = (SZ_Q << 8) | SZ_O,
+
+} UD_ATTR_PACKED;
+
+
+/* resolve complex size type.
+ */
+static inline enum ud_operand_size
+Mx_mem_size(enum ud_operand_size size)
+{
+ return (size >> 8) & 0xff;
+}
+
+static inline enum ud_operand_size
+Mx_reg_size(enum ud_operand_size size)
+{
+ return size & 0xff;
+}
+
+/* A single operand of an entry in the instruction table.
+ * (internal use only)
+ */
+struct ud_itab_entry_operand
+{
+ enum ud_operand_code type;
+ enum ud_operand_size size;
+};
+
+
+/* A single entry in an instruction table.
+ *(internal use only)
+ */
+struct ud_itab_entry
+{
+ enum ud_mnemonic_code mnemonic;
+ struct ud_itab_entry_operand operand1;
+ struct ud_itab_entry_operand operand2;
+ struct ud_itab_entry_operand operand3;
+ uint32_t prefix;
+};
+
+struct ud_lookup_table_list_entry {
+ const uint16_t *table;
+ enum ud_table_type type;
+ const char *meta;
+};
+
+
+
+static inline int
+ud_opcode_field_sext(uint8_t primary_opcode)
+{
+ return (primary_opcode & 0x02) != 0;
+}
+
+extern struct ud_itab_entry ud_itab[];
+extern struct ud_lookup_table_list_entry ud_lookup_table_list[];
+
+#endif /* UD_DECODE_H */
+
+/* vim:cindent
+ * vim:expandtab
+ * vim:ts=4
+ * vim:sw=4
+ */
diff --git a/winsup/cygwin/udis86/extern.h b/winsup/cygwin/udis86/extern.h
new file mode 100644
index 000000000..ae9f82f22
--- /dev/null
+++ b/winsup/cygwin/udis86/extern.h
@@ -0,0 +1,105 @@
+/* udis86 - libudis86/extern.h
+ *
+ * Copyright (c) 2002-2009, 2013 Vivek Thampi
+ * 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.
+ */
+#ifndef UD_EXTERN_H
+#define UD_EXTERN_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "types.h"
+
+/* ============================= PUBLIC API ================================= */
+
+extern void ud_init(struct ud*);
+
+extern void ud_set_mode(struct ud*, uint8_t);
+
+extern void ud_set_pc(struct ud*, uint64_t);
+
+extern void ud_set_input_hook(struct ud*, int (*)(struct ud*));
+
+extern void ud_set_input_buffer(struct ud*, const uint8_t*, size_t);
+
+#ifndef __UD_STANDALONE__
+extern void ud_set_input_file(struct ud*, FILE*);
+#endif /* __UD_STANDALONE__ */
+
+extern void ud_set_vendor(struct ud*, unsigned);
+
+extern void ud_set_syntax(struct ud*, void (*)(struct ud*));
+
+extern void ud_input_skip(struct ud*, size_t);
+
+extern int ud_input_end(const struct ud*);
+
+extern unsigned int ud_decode(struct ud*);
+
+extern unsigned int ud_disassemble(struct ud*);
+
+extern void ud_translate_intel(struct ud*);
+
+extern void ud_translate_att(struct ud*);
+
+extern const char* ud_insn_asm(const struct ud* u);
+
+extern const uint8_t* ud_insn_ptr(const struct ud* u);
+
+extern uint64_t ud_insn_off(const struct ud*);
+
+extern const char* ud_insn_hex(struct ud*);
+
+extern unsigned int ud_insn_len(const struct ud* u);
+
+extern const struct ud_operand* ud_insn_opr(const struct ud *u, unsigned int n);
+
+extern int ud_opr_is_sreg(const struct ud_operand *opr);
+
+extern int ud_opr_is_gpr(const struct ud_operand *opr);
+
+extern enum ud_mnemonic_code ud_insn_mnemonic(const struct ud *u);
+
+extern const char* ud_lookup_mnemonic(enum ud_mnemonic_code c);
+
+extern void ud_set_user_opaque_data(struct ud*, void*);
+
+extern void* ud_get_user_opaque_data(const struct ud*);
+
+extern uint64_t ud_insn_sext_imm(const struct ud*, const struct ud_operand*);
+
+extern void ud_set_asm_buffer(struct ud *u, char *buf, size_t size);
+
+extern void ud_set_sym_resolver(struct ud *u,
+ const char* (*resolver)(struct ud*,
+ uint64_t addr,
+ int64_t *offset));
+
+/* ========================================================================== */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* UD_EXTERN_H */
diff --git a/winsup/cygwin/udis86/itab.c b/winsup/cygwin/udis86/itab.c
new file mode 100644
index 000000000..a3d0634b8
--- /dev/null
+++ b/winsup/cygwin/udis86/itab.c
@@ -0,0 +1,8401 @@
+/* itab.c -- generated by udis86:scripts/ud_itab.py, do no edit */
+#include "decode.h"
+
+#define GROUP(n) (0x8000 | (n))
+
+
+static const uint16_t ud_itab__1[] = {
+ /* 0 */ 7, 0,
+};
+
+static const uint16_t ud_itab__2[] = {
+ /* 0 */ 8, 0,
+};
+
+static const uint16_t ud_itab__3[] = {
+ /* 0 */ 15, 0,
+};
+
+static const uint16_t ud_itab__6[] = {
+ /* 0 */ 16, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__7[] = {
+ /* 0 */ 17, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__8[] = {
+ /* 0 */ 18, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__9[] = {
+ /* 0 */ 19, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__10[] = {
+ /* 0 */ 20, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__11[] = {
+ /* 0 */ 21, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__5[] = {
+ /* 0 */ GROUP(6), GROUP(7), GROUP(8), GROUP(9),
+ /* 4 */ GROUP(10), GROUP(11), 0, 0,
+};
+
+static const uint16_t ud_itab__15[] = {
+ /* 0 */ 22, 0,
+};
+
+static const uint16_t ud_itab__14[] = {
+ /* 0 */ GROUP(15), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__17[] = {
+ /* 0 */ 23, 0,
+};
+
+static const uint16_t ud_itab__16[] = {
+ /* 0 */ GROUP(17), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__19[] = {
+ /* 0 */ 24, 0,
+};
+
+static const uint16_t ud_itab__18[] = {
+ /* 0 */ GROUP(19), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__21[] = {
+ /* 0 */ 25, 0,
+};
+
+static const uint16_t ud_itab__20[] = {
+ /* 0 */ GROUP(21), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__23[] = {
+ /* 0 */ 26, 0,
+};
+
+static const uint16_t ud_itab__22[] = {
+ /* 0 */ GROUP(23), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__25[] = {
+ /* 0 */ 27, 0,
+};
+
+static const uint16_t ud_itab__24[] = {
+ /* 0 */ GROUP(25), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__27[] = {
+ /* 0 */ 28, 0,
+};
+
+static const uint16_t ud_itab__26[] = {
+ /* 0 */ GROUP(27), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__13[] = {
+ /* 0 */ GROUP(14), GROUP(16), GROUP(18), GROUP(20),
+ /* 4 */ GROUP(22), 0, GROUP(24), GROUP(26),
+};
+
+static const uint16_t ud_itab__32[] = {
+ /* 0 */ 0, 29, 0,
+};
+
+static const uint16_t ud_itab__31[] = {
+ /* 0 */ 0, GROUP(32),
+};
+
+static const uint16_t ud_itab__30[] = {
+ /* 0 */ GROUP(31), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__35[] = {
+ /* 0 */ 0, 30, 0,
+};
+
+static const uint16_t ud_itab__34[] = {
+ /* 0 */ 0, GROUP(35),
+};
+
+static const uint16_t ud_itab__33[] = {
+ /* 0 */ GROUP(34), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__38[] = {
+ /* 0 */ 0, 31, 0,
+};
+
+static const uint16_t ud_itab__37[] = {
+ /* 0 */ 0, GROUP(38),
+};
+
+static const uint16_t ud_itab__36[] = {
+ /* 0 */ GROUP(37), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__41[] = {
+ /* 0 */ 0, 32, 0,
+};
+
+static const uint16_t ud_itab__40[] = {
+ /* 0 */ 0, GROUP(41),
+};
+
+static const uint16_t ud_itab__39[] = {
+ /* 0 */ GROUP(40), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__29[] = {
+ /* 0 */ 0, GROUP(30), GROUP(33), GROUP(36),
+ /* 4 */ GROUP(39), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__44[] = {
+ /* 0 */ 0, 33,
+};
+
+static const uint16_t ud_itab__43[] = {
+ /* 0 */ GROUP(44), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__46[] = {
+ /* 0 */ 0, 34,
+};
+
+static const uint16_t ud_itab__45[] = {
+ /* 0 */ GROUP(46), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__42[] = {
+ /* 0 */ GROUP(43), GROUP(45), 0, 0,
+ /* 4 */ 0, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__49[] = {
+ /* 0 */ 0, 35,
+};
+
+static const uint16_t ud_itab__48[] = {
+ /* 0 */ GROUP(49), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__51[] = {
+ /* 0 */ 0, 36,
+};
+
+static const uint16_t ud_itab__50[] = {
+ /* 0 */ GROUP(51), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__47[] = {
+ /* 0 */ GROUP(48), GROUP(50), 0, 0,
+ /* 4 */ 0, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__55[] = {
+ /* 0 */ 37, 0, 0,
+};
+
+static const uint16_t ud_itab__54[] = {
+ /* 0 */ 0, GROUP(55),
+};
+
+static const uint16_t ud_itab__53[] = {
+ /* 0 */ GROUP(54), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__58[] = {
+ /* 0 */ 38, 0, 0,
+};
+
+static const uint16_t ud_itab__57[] = {
+ /* 0 */ 0, GROUP(58),
+};
+
+static const uint16_t ud_itab__56[] = {
+ /* 0 */ GROUP(57), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__61[] = {
+ /* 0 */ 39, 0, 0,
+};
+
+static const uint16_t ud_itab__60[] = {
+ /* 0 */ 0, GROUP(61),
+};
+
+static const uint16_t ud_itab__59[] = {
+ /* 0 */ GROUP(60), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__64[] = {
+ /* 0 */ 40, 0, 0,
+};
+
+static const uint16_t ud_itab__63[] = {
+ /* 0 */ 0, GROUP(64),
+};
+
+static const uint16_t ud_itab__62[] = {
+ /* 0 */ GROUP(63), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__67[] = {
+ /* 0 */ 41, 0, 0,
+};
+
+static const uint16_t ud_itab__66[] = {
+ /* 0 */ 0, GROUP(67),
+};
+
+static const uint16_t ud_itab__65[] = {
+ /* 0 */ GROUP(66), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__70[] = {
+ /* 0 */ 42, 0, 0,
+};
+
+static const uint16_t ud_itab__69[] = {
+ /* 0 */ 0, GROUP(70),
+};
+
+static const uint16_t ud_itab__68[] = {
+ /* 0 */ GROUP(69), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__73[] = {
+ /* 0 */ 43, 0, 0,
+};
+
+static const uint16_t ud_itab__72[] = {
+ /* 0 */ 0, GROUP(73),
+};
+
+static const uint16_t ud_itab__71[] = {
+ /* 0 */ GROUP(72), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__76[] = {
+ /* 0 */ 44, 0, 0,
+};
+
+static const uint16_t ud_itab__75[] = {
+ /* 0 */ 0, GROUP(76),
+};
+
+static const uint16_t ud_itab__74[] = {
+ /* 0 */ GROUP(75), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__52[] = {
+ /* 0 */ GROUP(53), GROUP(56), GROUP(59), GROUP(62),
+ /* 4 */ GROUP(65), GROUP(68), GROUP(71), GROUP(74),
+};
+
+static const uint16_t ud_itab__78[] = {
+ /* 0 */ 0, 45,
+};
+
+static const uint16_t ud_itab__77[] = {
+ /* 0 */ GROUP(78), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__80[] = {
+ /* 0 */ 0, 46,
+};
+
+static const uint16_t ud_itab__79[] = {
+ /* 0 */ GROUP(80), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__83[] = {
+ /* 0 */ 0, 47,
+};
+
+static const uint16_t ud_itab__82[] = {
+ /* 0 */ GROUP(83), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__86[] = {
+ /* 0 */ 48, 0, 0,
+};
+
+static const uint16_t ud_itab__85[] = {
+ /* 0 */ 0, GROUP(86),
+};
+
+static const uint16_t ud_itab__84[] = {
+ /* 0 */ GROUP(85), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__81[] = {
+ /* 0 */ GROUP(82), GROUP(84), 0, 0,
+ /* 4 */ 0, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__28[] = {
+ /* 0 */ GROUP(29), GROUP(42), GROUP(47), GROUP(52),
+ /* 4 */ GROUP(77), 0, GROUP(79), GROUP(81),
+};
+
+static const uint16_t ud_itab__12[] = {
+ /* 0 */ GROUP(13), GROUP(28),
+};
+
+static const uint16_t ud_itab__87[] = {
+ /* 0 */ 49, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__88[] = {
+ /* 0 */ 50, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__89[] = {
+ /* 0 */ 51, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__90[] = {
+ /* 0 */ 52, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__91[] = {
+ /* 0 */ 53, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__92[] = {
+ /* 0 */ 54, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__93[] = {
+ /* 0 */ 55, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__94[] = {
+ /* 0 */ 56, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__96[] = {
+ /* 0 */ 57, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__97[] = {
+ /* 0 */ 58, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__98[] = {
+ /* 0 */ 59, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__99[] = {
+ /* 0 */ 60, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__100[] = {
+ /* 0 */ 61, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__101[] = {
+ /* 0 */ 62, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__102[] = {
+ /* 0 */ 63, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__103[] = {
+ /* 0 */ 64, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__95[] = {
+ /* 0 */ GROUP(96), GROUP(97), GROUP(98), GROUP(99),
+ /* 4 */ GROUP(100), GROUP(101), GROUP(102), GROUP(103),
+};
+
+static const uint16_t ud_itab__104[] = {
+ /* 0 */ 65, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__105[] = {
+ /* 0 */ 0, 0, 0, 0,
+ /* 4 */ 0, 0, 0, 0,
+ /* 8 */ 0, 0, 0, 0,
+ /* c */ 66, 67, 0, 0,
+ /* 10 */ 0, 0, 0, 0,
+ /* 14 */ 0, 0, 0, 0,
+ /* 18 */ 0, 0, 0, 0,
+ /* 1c */ 68, 69, 0, 0,
+ /* 20 */ 0, 0, 0, 0,
+ /* 24 */ 0, 0, 0, 0,
+ /* 28 */ 0, 0, 0, 0,
+ /* 2c */ 0, 0, 0, 0,
+ /* 30 */ 0, 0, 0, 0,
+ /* 34 */ 0, 0, 0, 0,
+ /* 38 */ 0, 0, 0, 0,
+ /* 3c */ 0, 0, 0, 0,
+ /* 40 */ 0, 0, 0, 0,
+ /* 44 */ 0, 0, 0, 0,
+ /* 48 */ 0, 0, 0, 0,
+ /* 4c */ 0, 0, 0, 0,
+ /* 50 */ 0, 0, 0, 0,
+ /* 54 */ 0, 0, 0, 0,
+ /* 58 */ 0, 0, 0, 0,
+ /* 5c */ 0, 0, 0, 0,
+ /* 60 */ 0, 0, 0, 0,
+ /* 64 */ 0, 0, 0, 0,
+ /* 68 */ 0, 0, 0, 0,
+ /* 6c */ 0, 0, 0, 0,
+ /* 70 */ 0, 0, 0, 0,
+ /* 74 */ 0, 0, 0, 0,
+ /* 78 */ 0, 0, 0, 0,
+ /* 7c */ 0, 0, 0, 0,
+ /* 80 */ 0, 0, 0, 0,
+ /* 84 */ 0, 0, 0, 0,
+ /* 88 */ 0, 0, 70, 0,
+ /* 8c */ 0, 0, 71, 0,
+ /* 90 */ 72, 0, 0, 0,
+ /* 94 */ 73, 0, 74, 75,
+ /* 98 */ 0, 0, 76, 0,
+ /* 9c */ 0, 0, 77, 0,
+ /* a0 */ 78, 0, 0, 0,
+ /* a4 */ 79, 0, 80, 81,
+ /* a8 */ 0, 0, 82, 0,
+ /* ac */ 0, 0, 83, 0,
+ /* b0 */ 84, 0, 0, 0,
+ /* b4 */ 85, 0, 86, 87,
+ /* b8 */ 0, 0, 0, 88,
+ /* bc */ 0, 0, 0, 89,
+ /* c0 */ 0, 0, 0, 0,
+ /* c4 */ 0, 0, 0, 0,
+ /* c8 */ 0, 0, 0, 0,
+ /* cc */ 0, 0, 0, 0,
+ /* d0 */ 0, 0, 0, 0,
+ /* d4 */ 0, 0, 0, 0,
+ /* d8 */ 0, 0, 0, 0,
+ /* dc */ 0, 0, 0, 0,
+ /* e0 */ 0, 0, 0, 0,
+ /* e4 */ 0, 0, 0, 0,
+ /* e8 */ 0, 0, 0, 0,
+ /* ec */ 0, 0, 0, 0,
+ /* f0 */ 0, 0, 0, 0,
+ /* f4 */ 0, 0, 0, 0,
+ /* f8 */ 0, 0, 0, 0,
+ /* fc */ 0, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__106[] = {
+ /* 0 */ 90, 91, 92, 93,
+};
+
+static const uint16_t ud_itab__107[] = {
+ /* 0 */ 94, 95, 96, 97,
+};
+
+static const uint16_t ud_itab__110[] = {
+ /* 0 */ 98, 0,
+};
+
+static const uint16_t ud_itab__111[] = {
+ /* 0 */ 99, 0,
+};
+
+static const uint16_t ud_itab__112[] = {
+ /* 0 */ 100, 0,
+};
+
+static const uint16_t ud_itab__113[] = {
+ /* 0 */ 101, 0,
+};
+
+static const uint16_t ud_itab__109[] = {
+ /* 0 */ GROUP(110), GROUP(111), GROUP(112), GROUP(113),
+};
+
+static const uint16_t ud_itab__115[] = {
+ /* 0 */ 0, 102,
+};
+
+static const uint16_t ud_itab__116[] = {
+ /* 0 */ 0, 103,
+};
+
+static const uint16_t ud_itab__117[] = {
+ /* 0 */ 0, 104,
+};
+
+static const uint16_t ud_itab__114[] = {
+ /* 0 */ GROUP(115), GROUP(116), GROUP(117), 0,
+};
+
+static const uint16_t ud_itab__108[] = {
+ /* 0 */ GROUP(109), GROUP(114),
+};
+
+static const uint16_t ud_itab__118[] = {
+ /* 0 */ 105, 0, 0, 106,
+};
+
+static const uint16_t ud_itab__119[] = {
+ /* 0 */ 107, 0, 0, 108,
+};
+
+static const uint16_t ud_itab__120[] = {
+ /* 0 */ 109, 0, 0, 110,
+};
+
+static const uint16_t ud_itab__123[] = {
+ /* 0 */ 111, 0,
+};
+
+static const uint16_t ud_itab__124[] = {
+ /* 0 */ 112, 0,
+};
+
+static const uint16_t ud_itab__125[] = {
+ /* 0 */ 113, 0,
+};
+
+static const uint16_t ud_itab__122[] = {
+ /* 0 */ GROUP(123), 0, GROUP(124), GROUP(125),
+};
+
+static const uint16_t ud_itab__127[] = {
+ /* 0 */ 0, 114,
+};
+
+static const uint16_t ud_itab__128[] = {
+ /* 0 */ 0, 115,
+};
+
+static const uint16_t ud_itab__126[] = {
+ /* 0 */ GROUP(127), 0, GROUP(128), 0,
+};
+
+static const uint16_t ud_itab__121[] = {
+ /* 0 */ GROUP(122), GROUP(126),
+};
+
+static const uint16_t ud_itab__129[] = {
+ /* 0 */ 116, 0, 0, 117,
+};
+
+static const uint16_t ud_itab__131[] = {
+ /* 0 */ 118, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__132[] = {
+ /* 0 */ 119, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__133[] = {
+ /* 0 */ 120, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__134[] = {
+ /* 0 */ 121, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__130[] = {
+ /* 0 */ GROUP(131), GROUP(132), GROUP(133), GROUP(134),
+ /* 4 */ 0, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__135[] = {
+ /* 0 */ 122, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__136[] = {
+ /* 0 */ 123, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__137[] = {
+ /* 0 */ 124, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__138[] = {
+ /* 0 */ 125, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__139[] = {
+ /* 0 */ 126, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__140[] = {
+ /* 0 */ 127, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__141[] = {
+ /* 0 */ 128, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__142[] = {
+ /* 0 */ 129, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__143[] = {
+ /* 0 */ 130, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__144[] = {
+ /* 0 */ 131, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__145[] = {
+ /* 0 */ 132, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__146[] = {
+ /* 0 */ 133, 0, 0, 134,
+};
+
+static const uint16_t ud_itab__147[] = {
+ /* 0 */ 135, 0, 0, 136,
+};
+
+static const uint16_t ud_itab__148[] = {
+ /* 0 */ 137, 138, 139, 140,
+};
+
+static const uint16_t ud_itab__149[] = {
+ /* 0 */ 141, 0, 0, 142,
+};
+
+static const uint16_t ud_itab__150[] = {
+ /* 0 */ 143, 144, 145, 146,
+};
+
+static const uint16_t ud_itab__151[] = {
+ /* 0 */ 147, 148, 149, 150,
+};
+
+static const uint16_t ud_itab__152[] = {
+ /* 0 */ 151, 0, 0, 152,
+};
+
+static const uint16_t ud_itab__153[] = {
+ /* 0 */ 153, 0, 0, 154,
+};
+
+static const uint16_t ud_itab__154[] = {
+ /* 0 */ 155, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__155[] = {
+ /* 0 */ 156, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__156[] = {
+ /* 0 */ 157, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__157[] = {
+ /* 0 */ 158, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__160[] = {
+ /* 0 */ 0, 160, 0,
+};
+
+static const uint16_t ud_itab__159[] = {
+ /* 0 */ 159, GROUP(160),
+};
+
+static const uint16_t ud_itab__158[] = {
+ /* 0 */ GROUP(159), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__163[] = {
+ /* 0 */ 0, 162, 0,
+};
+
+static const uint16_t ud_itab__162[] = {
+ /* 0 */ 161, GROUP(163),
+};
+
+static const uint16_t ud_itab__161[] = {
+ /* 0 */ GROUP(162), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__164[] = {
+ /* 0 */ 163, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__166[] = {
+ /* 0 */ 164, 0, 0, 165,
+};
+
+static const uint16_t ud_itab__167[] = {
+ /* 0 */ 166, 0, 0, 167,
+};
+
+static const uint16_t ud_itab__168[] = {
+ /* 0 */ 168, 0, 0, 169,
+};
+
+static const uint16_t ud_itab__169[] = {
+ /* 0 */ 170, 0, 0, 171,
+};
+
+static const uint16_t ud_itab__170[] = {
+ /* 0 */ 172, 0, 0, 173,
+};
+
+static const uint16_t ud_itab__171[] = {
+ /* 0 */ 174, 0, 0, 175,
+};
+
+static const uint16_t ud_itab__172[] = {
+ /* 0 */ 176, 0, 0, 177,
+};
+
+static const uint16_t ud_itab__173[] = {
+ /* 0 */ 178, 0, 0, 179,
+};
+
+static const uint16_t ud_itab__174[] = {
+ /* 0 */ 180, 0, 0, 181,
+};
+
+static const uint16_t ud_itab__175[] = {
+ /* 0 */ 182, 0, 0, 183,
+};
+
+static const uint16_t ud_itab__176[] = {
+ /* 0 */ 184, 0, 0, 185,
+};
+
+static const uint16_t ud_itab__177[] = {
+ /* 0 */ 186, 0, 0, 187,
+};
+
+static const uint16_t ud_itab__178[] = {
+ /* 0 */ 0, 0, 0, 188,
+};
+
+static const uint16_t ud_itab__179[] = {
+ /* 0 */ 0, 0, 0, 189,
+};
+
+static const uint16_t ud_itab__180[] = {
+ /* 0 */ 0, 0, 0, 190,
+};
+
+static const uint16_t ud_itab__181[] = {
+ /* 0 */ 0, 0, 0, 191,
+};
+
+static const uint16_t ud_itab__182[] = {
+ /* 0 */ 192, 0, 0, 193,
+};
+
+static const uint16_t ud_itab__183[] = {
+ /* 0 */ 194, 0, 0, 195,
+};
+
+static const uint16_t ud_itab__184[] = {
+ /* 0 */ 196, 0, 0, 197,
+};
+
+static const uint16_t ud_itab__185[] = {
+ /* 0 */ 0, 0, 0, 198,
+};
+
+static const uint16_t ud_itab__186[] = {
+ /* 0 */ 0, 0, 0, 199,
+};
+
+static const uint16_t ud_itab__187[] = {
+ /* 0 */ 0, 0, 0, 200,
+};
+
+static const uint16_t ud_itab__188[] = {
+ /* 0 */ 0, 0, 0, 201,
+};
+
+static const uint16_t ud_itab__189[] = {
+ /* 0 */ 0, 0, 0, 202,
+};
+
+static const uint16_t ud_itab__190[] = {
+ /* 0 */ 0, 0, 0, 203,
+};
+
+static const uint16_t ud_itab__191[] = {
+ /* 0 */ 0, 0, 0, 204,
+};
+
+static const uint16_t ud_itab__192[] = {
+ /* 0 */ 0, 0, 0, 205,
+};
+
+static const uint16_t ud_itab__193[] = {
+ /* 0 */ 0, 0, 0, 206,
+};
+
+static const uint16_t ud_itab__194[] = {
+ /* 0 */ 0, 0, 0, 207,
+};
+
+static const uint16_t ud_itab__195[] = {
+ /* 0 */ 0, 0, 0, 208,
+};
+
+static const uint16_t ud_itab__196[] = {
+ /* 0 */ 0, 0, 0, 209,
+};
+
+static const uint16_t ud_itab__197[] = {
+ /* 0 */ 0, 0, 0, 210,
+};
+
+static const uint16_t ud_itab__198[] = {
+ /* 0 */ 0, 0, 0, 211,
+};
+
+static const uint16_t ud_itab__199[] = {
+ /* 0 */ 0, 0, 0, 212,
+};
+
+static const uint16_t ud_itab__200[] = {
+ /* 0 */ 0, 0, 0, 213,
+};
+
+static const uint16_t ud_itab__201[] = {
+ /* 0 */ 0, 0, 0, 214,
+};
+
+static const uint16_t ud_itab__202[] = {
+ /* 0 */ 0, 0, 0, 215,
+};
+
+static const uint16_t ud_itab__203[] = {
+ /* 0 */ 0, 0, 0, 216,
+};
+
+static const uint16_t ud_itab__204[] = {
+ /* 0 */ 0, 0, 0, 217,
+};
+
+static const uint16_t ud_itab__205[] = {
+ /* 0 */ 0, 0, 0, 218,
+};
+
+static const uint16_t ud_itab__206[] = {
+ /* 0 */ 0, 0, 0, 219,
+};
+
+static const uint16_t ud_itab__207[] = {
+ /* 0 */ 0, 0, 0, 220,
+};
+
+static const uint16_t ud_itab__208[] = {
+ /* 0 */ 0, 0, 0, 221,
+};
+
+static const uint16_t ud_itab__209[] = {
+ /* 0 */ 0, 0, 0, 222,
+};
+
+static const uint16_t ud_itab__210[] = {
+ /* 0 */ 0, 0, 0, 223,
+};
+
+static const uint16_t ud_itab__211[] = {
+ /* 0 */ 0, 0, 0, 224,
+};
+
+static const uint16_t ud_itab__214[] = {
+ /* 0 */ 0, 225, 0,
+};
+
+static const uint16_t ud_itab__213[] = {
+ /* 0 */ 0, GROUP(214),
+};
+
+static const uint16_t ud_itab__212[] = {
+ /* 0 */ 0, 0, 0, GROUP(213),
+};
+
+static const uint16_t ud_itab__217[] = {
+ /* 0 */ 0, 226, 0,
+};
+
+static const uint16_t ud_itab__216[] = {
+ /* 0 */ 0, GROUP(217),
+};
+
+static const uint16_t ud_itab__215[] = {
+ /* 0 */ 0, 0, 0, GROUP(216),
+};
+
+static const uint16_t ud_itab__218[] = {
+ /* 0 */ 0, 0, 0, 227,
+};
+
+static const uint16_t ud_itab__219[] = {
+ /* 0 */ 0, 0, 0, 228,
+};
+
+static const uint16_t ud_itab__220[] = {
+ /* 0 */ 0, 0, 0, 229,
+};
+
+static const uint16_t ud_itab__221[] = {
+ /* 0 */ 0, 0, 0, 230,
+};
+
+static const uint16_t ud_itab__222[] = {
+ /* 0 */ 0, 0, 0, 231,
+};
+
+static const uint16_t ud_itab__223[] = {
+ /* 0 */ 232, 233, 0, 0,
+};
+
+static const uint16_t ud_itab__224[] = {
+ /* 0 */ 234, 235, 0, 0,
+};
+
+static const uint16_t ud_itab__165[] = {
+ /* 0 */ GROUP(166), GROUP(167), GROUP(168), GROUP(169),
+ /* 4 */ GROUP(170), GROUP(171), GROUP(172), GROUP(173),
+ /* 8 */ GROUP(174), GROUP(175), GROUP(176), GROUP(177),
+ /* c */ 0, 0, 0, 0,
+ /* 10 */ GROUP(178), 0, 0, 0,
+ /* 14 */ GROUP(179), GROUP(180), 0, GROUP(181),
+ /* 18 */ 0, 0, 0, 0,
+ /* 1c */ GROUP(182), GROUP(183), GROUP(184), 0,
+ /* 20 */ GROUP(185), GROUP(186), GROUP(187), GROUP(188),
+ /* 24 */ GROUP(189), GROUP(190), 0, 0,
+ /* 28 */ GROUP(191), GROUP(192), GROUP(193), GROUP(194),
+ /* 2c */ 0, 0, 0, 0,
+ /* 30 */ GROUP(195), GROUP(196), GROUP(197), GROUP(198),
+ /* 34 */ GROUP(199), GROUP(200), 0, GROUP(201),
+ /* 38 */ GROUP(202), GROUP(203), GROUP(204), GROUP(205),
+ /* 3c */ GROUP(206), GROUP(207), GROUP(208), GROUP(209),
+ /* 40 */ GROUP(210), GROUP(211), 0, 0,
+ /* 44 */ 0, 0, 0, 0,
+ /* 48 */ 0, 0, 0, 0,
+ /* 4c */ 0, 0, 0, 0,
+ /* 50 */ 0, 0, 0, 0,
+ /* 54 */ 0, 0, 0, 0,
+ /* 58 */ 0, 0, 0, 0,
+ /* 5c */ 0, 0, 0, 0,
+ /* 60 */ 0, 0, 0, 0,
+ /* 64 */ 0, 0, 0, 0,
+ /* 68 */ 0, 0, 0, 0,
+ /* 6c */ 0, 0, 0, 0,
+ /* 70 */ 0, 0, 0, 0,
+ /* 74 */ 0, 0, 0, 0,
+ /* 78 */ 0, 0, 0, 0,
+ /* 7c */ 0, 0, 0, 0,
+ /* 80 */ GROUP(212), GROUP(215), 0, 0,
+ /* 84 */ 0, 0, 0, 0,
+ /* 88 */ 0, 0, 0, 0,
+ /* 8c */ 0, 0, 0, 0,
+ /* 90 */ 0, 0, 0, 0,
+ /* 94 */ 0, 0, 0, 0,
+ /* 98 */ 0, 0, 0, 0,
+ /* 9c */ 0, 0, 0, 0,
+ /* a0 */ 0, 0, 0, 0,
+ /* a4 */ 0, 0, 0, 0,
+ /* a8 */ 0, 0, 0, 0,
+ /* ac */ 0, 0, 0, 0,
+ /* b0 */ 0, 0, 0, 0,
+ /* b4 */ 0, 0, 0, 0,
+ /* b8 */ 0, 0, 0, 0,
+ /* bc */ 0, 0, 0, 0,
+ /* c0 */ 0, 0, 0, 0,
+ /* c4 */ 0, 0, 0, 0,
+ /* c8 */ 0, 0, 0, 0,
+ /* cc */ 0, 0, 0, 0,
+ /* d0 */ 0, 0, 0, 0,
+ /* d4 */ 0, 0, 0, 0,
+ /* d8 */ 0, 0, 0, GROUP(218),
+ /* dc */ GROUP(219), GROUP(220), GROUP(221), GROUP(222),
+ /* e0 */ 0, 0, 0, 0,
+ /* e4 */ 0, 0, 0, 0,
+ /* e8 */ 0, 0, 0, 0,
+ /* ec */ 0, 0, 0, 0,
+ /* f0 */ GROUP(223), GROUP(224), 0, 0,
+ /* f4 */ 0, 0, 0, 0,
+ /* f8 */ 0, 0, 0, 0,
+ /* fc */ 0, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__226[] = {
+ /* 0 */ 0, 0, 0, 236,
+};
+
+static const uint16_t ud_itab__227[] = {
+ /* 0 */ 0, 0, 0, 237,
+};
+
+static const uint16_t ud_itab__228[] = {
+ /* 0 */ 0, 0, 0, 238,
+};
+
+static const uint16_t ud_itab__229[] = {
+ /* 0 */ 0, 0, 0, 239,
+};
+
+static const uint16_t ud_itab__230[] = {
+ /* 0 */ 0, 0, 0, 240,
+};
+
+static const uint16_t ud_itab__231[] = {
+ /* 0 */ 0, 0, 0, 241,
+};
+
+static const uint16_t ud_itab__232[] = {
+ /* 0 */ 0, 0, 0, 242,
+};
+
+static const uint16_t ud_itab__233[] = {
+ /* 0 */ 243, 0, 0, 244,
+};
+
+static const uint16_t ud_itab__234[] = {
+ /* 0 */ 0, 0, 0, 245,
+};
+
+static const uint16_t ud_itab__235[] = {
+ /* 0 */ 0, 0, 0, 246,
+};
+
+static const uint16_t ud_itab__237[] = {
+ /* 0 */ 247, 248, 249,
+};
+
+static const uint16_t ud_itab__236[] = {
+ /* 0 */ 0, 0, 0, GROUP(237),
+};
+
+static const uint16_t ud_itab__238[] = {
+ /* 0 */ 0, 0, 0, 250,
+};
+
+static const uint16_t ud_itab__239[] = {
+ /* 0 */ 0, 0, 0, 251,
+};
+
+static const uint16_t ud_itab__240[] = {
+ /* 0 */ 0, 0, 0, 252,
+};
+
+static const uint16_t ud_itab__242[] = {
+ /* 0 */ 253, 254, 255,
+};
+
+static const uint16_t ud_itab__241[] = {
+ /* 0 */ 0, 0, 0, GROUP(242),
+};
+
+static const uint16_t ud_itab__243[] = {
+ /* 0 */ 0, 0, 0, 256,
+};
+
+static const uint16_t ud_itab__244[] = {
+ /* 0 */ 0, 0, 0, 257,
+};
+
+static const uint16_t ud_itab__245[] = {
+ /* 0 */ 0, 0, 0, 258,
+};
+
+static const uint16_t ud_itab__246[] = {
+ /* 0 */ 0, 0, 0, 259,
+};
+
+static const uint16_t ud_itab__247[] = {
+ /* 0 */ 0, 0, 0, 260,
+};
+
+static const uint16_t ud_itab__248[] = {
+ /* 0 */ 0, 0, 0, 261,
+};
+
+static const uint16_t ud_itab__249[] = {
+ /* 0 */ 0, 0, 0, 262,
+};
+
+static const uint16_t ud_itab__250[] = {
+ /* 0 */ 0, 0, 0, 263,
+};
+
+static const uint16_t ud_itab__251[] = {
+ /* 0 */ 0, 0, 0, 264,
+};
+
+static const uint16_t ud_itab__225[] = {
+ /* 0 */ 0, 0, 0, 0,
+ /* 4 */ 0, 0, 0, 0,
+ /* 8 */ GROUP(226), GROUP(227), GROUP(228), GROUP(229),
+ /* c */ GROUP(230), GROUP(231), GROUP(232), GROUP(233),
+ /* 10 */ 0, 0, 0, 0,
+ /* 14 */ GROUP(234), GROUP(235), GROUP(236), GROUP(238),
+ /* 18 */ 0, 0, 0, 0,
+ /* 1c */ 0, 0, 0, 0,
+ /* 20 */ GROUP(239), GROUP(240), GROUP(241), 0,
+ /* 24 */ 0, 0, 0, 0,
+ /* 28 */ 0, 0, 0, 0,
+ /* 2c */ 0, 0, 0, 0,
+ /* 30 */ 0, 0, 0, 0,
+ /* 34 */ 0, 0, 0, 0,
+ /* 38 */ 0, 0, 0, 0,
+ /* 3c */ 0, 0, 0, 0,
+ /* 40 */ GROUP(243), GROUP(244), GROUP(245), 0,
+ /* 44 */ GROUP(246), 0, 0, 0,
+ /* 48 */ 0, 0, 0, 0,
+ /* 4c */ 0, 0, 0, 0,
+ /* 50 */ 0, 0, 0, 0,
+ /* 54 */ 0, 0, 0, 0,
+ /* 58 */ 0, 0, 0, 0,
+ /* 5c */ 0, 0, 0, 0,
+ /* 60 */ GROUP(247), GROUP(248), GROUP(249), GROUP(250),
+ /* 64 */ 0, 0, 0, 0,
+ /* 68 */ 0, 0, 0, 0,
+ /* 6c */ 0, 0, 0, 0,
+ /* 70 */ 0, 0, 0, 0,
+ /* 74 */ 0, 0, 0, 0,
+ /* 78 */ 0, 0, 0, 0,
+ /* 7c */ 0, 0, 0, 0,
+ /* 80 */ 0, 0, 0, 0,
+ /* 84 */ 0, 0, 0, 0,
+ /* 88 */ 0, 0, 0, 0,
+ /* 8c */ 0, 0, 0, 0,
+ /* 90 */ 0, 0, 0, 0,
+ /* 94 */ 0, 0, 0, 0,
+ /* 98 */ 0, 0, 0, 0,
+ /* 9c */ 0, 0, 0, 0,
+ /* a0 */ 0, 0, 0, 0,
+ /* a4 */ 0, 0, 0, 0,
+ /* a8 */ 0, 0, 0, 0,
+ /* ac */ 0, 0, 0, 0,
+ /* b0 */ 0, 0, 0, 0,
+ /* b4 */ 0, 0, 0, 0,
+ /* b8 */ 0, 0, 0, 0,
+ /* bc */ 0, 0, 0, 0,
+ /* c0 */ 0, 0, 0, 0,
+ /* c4 */ 0, 0, 0, 0,
+ /* c8 */ 0, 0, 0, 0,
+ /* cc */ 0, 0, 0, 0,
+ /* d0 */ 0, 0, 0, 0,
+ /* d4 */ 0, 0, 0, 0,
+ /* d8 */ 0, 0, 0, 0,
+ /* dc */ 0, 0, 0, GROUP(251),
+ /* e0 */ 0, 0, 0, 0,
+ /* e4 */ 0, 0, 0, 0,
+ /* e8 */ 0, 0, 0, 0,
+ /* ec */ 0, 0, 0, 0,
+ /* f0 */ 0, 0, 0, 0,
+ /* f4 */ 0, 0, 0, 0,
+ /* f8 */ 0, 0, 0, 0,
+ /* fc */ 0, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__252[] = {
+ /* 0 */ 265, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__253[] = {
+ /* 0 */ 266, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__254[] = {
+ /* 0 */ 267, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__255[] = {
+ /* 0 */ 268, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__256[] = {
+ /* 0 */ 269, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__257[] = {
+ /* 0 */ 270, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__258[] = {
+ /* 0 */ 271, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__259[] = {
+ /* 0 */ 272, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__260[] = {
+ /* 0 */ 273, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__261[] = {
+ /* 0 */ 274, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__262[] = {
+ /* 0 */ 275, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__263[] = {
+ /* 0 */ 276, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__264[] = {
+ /* 0 */ 277, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__265[] = {
+ /* 0 */ 278, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__266[] = {
+ /* 0 */ 279, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__267[] = {
+ /* 0 */ 280, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__268[] = {
+ /* 0 */ 281, 0, 0, 282,
+};
+
+static const uint16_t ud_itab__269[] = {
+ /* 0 */ 283, 284, 285, 286,
+};
+
+static const uint16_t ud_itab__270[] = {
+ /* 0 */ 287, 0, 288, 0,
+};
+
+static const uint16_t ud_itab__271[] = {
+ /* 0 */ 289, 0, 290, 0,
+};
+
+static const uint16_t ud_itab__272[] = {
+ /* 0 */ 291, 0, 0, 292,
+};
+
+static const uint16_t ud_itab__273[] = {
+ /* 0 */ 293, 0, 0, 294,
+};
+
+static const uint16_t ud_itab__274[] = {
+ /* 0 */ 295, 0, 0, 296,
+};
+
+static const uint16_t ud_itab__275[] = {
+ /* 0 */ 297, 0, 0, 298,
+};
+
+static const uint16_t ud_itab__276[] = {
+ /* 0 */ 299, 300, 301, 302,
+};
+
+static const uint16_t ud_itab__277[] = {
+ /* 0 */ 303, 304, 305, 306,
+};
+
+static const uint16_t ud_itab__278[] = {
+ /* 0 */ 307, 308, 309, 310,
+};
+
+static const uint16_t ud_itab__279[] = {
+ /* 0 */ 311, 0, 312, 313,
+};
+
+static const uint16_t ud_itab__280[] = {
+ /* 0 */ 314, 315, 316, 317,
+};
+
+static const uint16_t ud_itab__281[] = {
+ /* 0 */ 318, 319, 320, 321,
+};
+
+static const uint16_t ud_itab__282[] = {
+ /* 0 */ 322, 323, 324, 325,
+};
+
+static const uint16_t ud_itab__283[] = {
+ /* 0 */ 326, 327, 328, 329,
+};
+
+static const uint16_t ud_itab__284[] = {
+ /* 0 */ 330, 0, 0, 331,
+};
+
+static const uint16_t ud_itab__285[] = {
+ /* 0 */ 332, 0, 0, 333,
+};
+
+static const uint16_t ud_itab__286[] = {
+ /* 0 */ 334, 0, 0, 335,
+};
+
+static const uint16_t ud_itab__287[] = {
+ /* 0 */ 336, 0, 0, 337,
+};
+
+static const uint16_t ud_itab__288[] = {
+ /* 0 */ 338, 0, 0, 339,
+};
+
+static const uint16_t ud_itab__289[] = {
+ /* 0 */ 340, 0, 0, 341,
+};
+
+static const uint16_t ud_itab__290[] = {
+ /* 0 */ 342, 0, 0, 343,
+};
+
+static const uint16_t ud_itab__291[] = {
+ /* 0 */ 344, 0, 0, 345,
+};
+
+static const uint16_t ud_itab__292[] = {
+ /* 0 */ 346, 0, 0, 347,
+};
+
+static const uint16_t ud_itab__293[] = {
+ /* 0 */ 348, 0, 0, 349,
+};
+
+static const uint16_t ud_itab__294[] = {
+ /* 0 */ 350, 0, 0, 351,
+};
+
+static const uint16_t ud_itab__295[] = {
+ /* 0 */ 352, 0, 0, 353,
+};
+
+static const uint16_t ud_itab__296[] = {
+ /* 0 */ 0, 0, 0, 354,
+};
+
+static const uint16_t ud_itab__297[] = {
+ /* 0 */ 0, 0, 0, 355,
+};
+
+static const uint16_t ud_itab__298[] = {
+ /* 0 */ 356, 0, 0, 357,
+};
+
+static const uint16_t ud_itab__299[] = {
+ /* 0 */ 358, 0, 359, 360,
+};
+
+static const uint16_t ud_itab__300[] = {
+ /* 0 */ 361, 362, 363, 364,
+};
+
+static const uint16_t ud_itab__302[] = {
+ /* 0 */ 365, 0, 0, 366,
+};
+
+static const uint16_t ud_itab__303[] = {
+ /* 0 */ 367, 0, 0, 368,
+};
+
+static const uint16_t ud_itab__304[] = {
+ /* 0 */ 369, 0, 0, 370,
+};
+
+static const uint16_t ud_itab__301[] = {
+ /* 0 */ 0, 0, GROUP(302), 0,
+ /* 4 */ GROUP(303), 0, GROUP(304), 0,
+};
+
+static const uint16_t ud_itab__306[] = {
+ /* 0 */ 371, 0, 0, 372,
+};
+
+static const uint16_t ud_itab__307[] = {
+ /* 0 */ 373, 0, 0, 374,
+};
+
+static const uint16_t ud_itab__308[] = {
+ /* 0 */ 375, 0, 0, 376,
+};
+
+static const uint16_t ud_itab__305[] = {
+ /* 0 */ 0, 0, GROUP(306), 0,
+ /* 4 */ GROUP(307), 0, GROUP(308), 0,
+};
+
+static const uint16_t ud_itab__310[] = {
+ /* 0 */ 377, 0, 0, 378,
+};
+
+static const uint16_t ud_itab__311[] = {
+ /* 0 */ 0, 0, 0, 379,
+};
+
+static const uint16_t ud_itab__312[] = {
+ /* 0 */ 380, 0, 0, 381,
+};
+
+static const uint16_t ud_itab__313[] = {
+ /* 0 */ 0, 0, 0, 382,
+};
+
+static const uint16_t ud_itab__309[] = {
+ /* 0 */ 0, 0, GROUP(310), GROUP(311),
+ /* 4 */ 0, 0, GROUP(312), GROUP(313),
+};
+
+static const uint16_t ud_itab__314[] = {
+ /* 0 */ 383, 0, 0, 384,
+};
+
+static const uint16_t ud_itab__315[] = {
+ /* 0 */ 385, 0, 0, 386,
+};
+
+static const uint16_t ud_itab__316[] = {
+ /* 0 */ 387, 0, 0, 388,
+};
+
+static const uint16_t ud_itab__317[] = {
+ /* 0 */ 389, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__319[] = {
+ /* 0 */ 0, 390, 0,
+};
+
+static const uint16_t ud_itab__318[] = {
+ /* 0 */ GROUP(319), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__321[] = {
+ /* 0 */ 0, 391, 0,
+};
+
+static const uint16_t ud_itab__320[] = {
+ /* 0 */ GROUP(321), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__322[] = {
+ /* 0 */ 0, 392, 0, 393,
+};
+
+static const uint16_t ud_itab__323[] = {
+ /* 0 */ 0, 394, 0, 395,
+};
+
+static const uint16_t ud_itab__324[] = {
+ /* 0 */ 396, 0, 397, 398,
+};
+
+static const uint16_t ud_itab__325[] = {
+ /* 0 */ 399, 0, 400, 401,
+};
+
+static const uint16_t ud_itab__326[] = {
+ /* 0 */ 402, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__327[] = {
+ /* 0 */ 403, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__328[] = {
+ /* 0 */ 404, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__329[] = {
+ /* 0 */ 405, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__330[] = {
+ /* 0 */ 406, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__331[] = {
+ /* 0 */ 407, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__332[] = {
+ /* 0 */ 408, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__333[] = {
+ /* 0 */ 409, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__334[] = {
+ /* 0 */ 410, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__335[] = {
+ /* 0 */ 411, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__336[] = {
+ /* 0 */ 412, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__337[] = {
+ /* 0 */ 413, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__338[] = {
+ /* 0 */ 414, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__339[] = {
+ /* 0 */ 415, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__340[] = {
+ /* 0 */ 416, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__341[] = {
+ /* 0 */ 417, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__342[] = {
+ /* 0 */ 418, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__343[] = {
+ /* 0 */ 419, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__344[] = {
+ /* 0 */ 420, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__345[] = {
+ /* 0 */ 421, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__346[] = {
+ /* 0 */ 422, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__347[] = {
+ /* 0 */ 423, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__348[] = {
+ /* 0 */ 424, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__349[] = {
+ /* 0 */ 425, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__350[] = {
+ /* 0 */ 426, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__351[] = {
+ /* 0 */ 427, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__352[] = {
+ /* 0 */ 428, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__353[] = {
+ /* 0 */ 429, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__354[] = {
+ /* 0 */ 430, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__355[] = {
+ /* 0 */ 431, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__356[] = {
+ /* 0 */ 432, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__357[] = {
+ /* 0 */ 433, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__358[] = {
+ /* 0 */ 434, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__359[] = {
+ /* 0 */ 435, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__360[] = {
+ /* 0 */ 436, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__361[] = {
+ /* 0 */ 437, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__362[] = {
+ /* 0 */ 438, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__363[] = {
+ /* 0 */ 439, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__368[] = {
+ /* 0 */ 0, 440,
+};
+
+static const uint16_t ud_itab__367[] = {
+ /* 0 */ GROUP(368), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__366[] = {
+ /* 0 */ GROUP(367), 0, 0, 0,
+ /* 4 */ 0, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__371[] = {
+ /* 0 */ 0, 441,
+};
+
+static const uint16_t ud_itab__370[] = {
+ /* 0 */ GROUP(371), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__369[] = {
+ /* 0 */ GROUP(370), 0, 0, 0,
+ /* 4 */ 0, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__374[] = {
+ /* 0 */ 0, 442,
+};
+
+static const uint16_t ud_itab__373[] = {
+ /* 0 */ GROUP(374), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__372[] = {
+ /* 0 */ GROUP(373), 0, 0, 0,
+ /* 4 */ 0, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__365[] = {
+ /* 0 */ GROUP(366), GROUP(369), GROUP(372), 0,
+ /* 4 */ 0, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__364[] = {
+ /* 0 */ 0, GROUP(365),
+};
+
+static const uint16_t ud_itab__379[] = {
+ /* 0 */ 0, 443,
+};
+
+static const uint16_t ud_itab__378[] = {
+ /* 0 */ GROUP(379), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__377[] = {
+ /* 0 */ GROUP(378), 0, 0, 0,
+ /* 4 */ 0, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__382[] = {
+ /* 0 */ 0, 444,
+};
+
+static const uint16_t ud_itab__381[] = {
+ /* 0 */ GROUP(382), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__380[] = {
+ /* 0 */ GROUP(381), 0, 0, 0,
+ /* 4 */ 0, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__385[] = {
+ /* 0 */ 0, 445,
+};
+
+static const uint16_t ud_itab__384[] = {
+ /* 0 */ GROUP(385), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__383[] = {
+ /* 0 */ GROUP(384), 0, 0, 0,
+ /* 4 */ 0, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__388[] = {
+ /* 0 */ 0, 446,
+};
+
+static const uint16_t ud_itab__387[] = {
+ /* 0 */ GROUP(388), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__386[] = {
+ /* 0 */ GROUP(387), 0, 0, 0,
+ /* 4 */ 0, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__391[] = {
+ /* 0 */ 0, 447,
+};
+
+static const uint16_t ud_itab__390[] = {
+ /* 0 */ GROUP(391), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__389[] = {
+ /* 0 */ GROUP(390), 0, 0, 0,
+ /* 4 */ 0, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__394[] = {
+ /* 0 */ 0, 448,
+};
+
+static const uint16_t ud_itab__393[] = {
+ /* 0 */ GROUP(394), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__392[] = {
+ /* 0 */ GROUP(393), 0, 0, 0,
+ /* 4 */ 0, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__376[] = {
+ /* 0 */ GROUP(377), GROUP(380), GROUP(383), GROUP(386),
+ /* 4 */ GROUP(389), GROUP(392), 0, 0,
+};
+
+static const uint16_t ud_itab__375[] = {
+ /* 0 */ 0, GROUP(376),
+};
+
+static const uint16_t ud_itab__395[] = {
+ /* 0 */ 449, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__396[] = {
+ /* 0 */ 450, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__397[] = {
+ /* 0 */ 451, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__398[] = {
+ /* 0 */ 452, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__399[] = {
+ /* 0 */ 453, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__400[] = {
+ /* 0 */ 454, 0, 0, 0,
+};
+
+static const uint16_t ud_itab__404[] = {
+ /* 0 */ 455, 0,
+};
+
+static const uint16_t ud_itab__403[] = {
+ /* 0 */ GROUP(404), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__406[] = {
+ /* 0 */ 456, 0,
+};
+
+static const uint16_t ud_itab__405[] = {
+ /* 0 */ GROUP(406), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__408[] = {
+ /* 0 */ 457, 0,
+};
+
+static const uint16_t ud_itab__407[] = {
+ /* 0 */ GROUP(408), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__410[] = {
+ /* 0 */ 458, 0,
+};
+
+static const uint16_t ud_itab__409[] = {
+ /* 0 */ GROUP(410), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__412[] = {
+ /* 0 */ 459, 0,
+};
+
+static const uint16_t ud_itab__411[] = {
+ /* 0 */ GROUP(412), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__414[] = {
+ /* 0 */ 460, 0,
+};
+
+static const uint16_t ud_itab__413[] = {
+ /* 0 */ GROUP(414), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__416[] = {
+ /* 0 */ 461, 0,
+};
+
+static const uint16_t ud_itab__415[] = {
+ /* 0 */ GROUP(416), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__402[] = {
+ /* 0 */ GROUP(403), GROUP(405), GROUP(407), GROUP(409),
+ /* 4 */ GROUP(411), GROUP(413), 0, GROUP(415),
+};
+
+static const uint16_t ud_itab__420[] = {
+ /* 0 */ 0, 462,
+};
+
+static const uint16_t ud_itab__419[] = {
+ /* 0 */ GROUP(420), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__422[] = {
+ /* 0 */ 0, 463,
+};
+
+static const uint16_t ud_itab__421[] = {
+ /* 0 */ GROUP(422), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__424[] = {
+ /* 0 */ 0, 464,
+};
+
+static const uint16_t ud_itab__423[] = {
+ /* 0 */ GROUP(424), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__426[] = {
+ /* 0 */ 0, 465,
+};
+
+static const uint16_t ud_itab__425[] = {
+ /* 0 */ GROUP(426), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__428[] = {
+ /* 0 */ 0, 466,
+};
+
+static const uint16_t ud_itab__427[] = {
+ /* 0 */ GROUP(428), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__430[] = {
+ /* 0 */ 0, 467,
+};
+
+static const uint16_t ud_itab__429[] = {
+ /* 0 */ GROUP(430), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__432[] = {
+ /* 0 */ 0, 468,
+};
+
+static const uint16_t ud_itab__431[] = {
+ /* 0 */ GROUP(432), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__434[] = {
+ /* 0 */ 0, 469,
+};
+
+static const uint16_t ud_itab__433[] = {
+ /* 0 */ GROUP(434), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__418[] = {
+ /* 0 */ GROUP(419), GROUP(421), GROUP(423), GROUP(425),
+ /* 4 */ GROUP(427), GROUP(429), GROUP(431), GROUP(433),
+};
+
+static const uint16_t ud_itab__437[] = {
+ /* 0 */ 0, 470,
+};
+
+static const uint16_t ud_itab__436[] = {
+ /* 0 */ GROUP(437), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__439[] = {
+ /* 0 */ 0, 471,
+};
+
+static const uint16_t ud_itab__438[] = {
+ /* 0 */ GROUP(439), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__441[] = {
+ /* 0 */ 0, 472,
+};
+
+static const uint16_t ud_itab__440[] = {
+ /* 0 */ GROUP(441), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__443[] = {
+ /* 0 */ 0, 473,
+};
+
+static const uint16_t ud_itab__442[] = {
+ /* 0 */ GROUP(443), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__445[] = {
+ /* 0 */ 0, 474,
+};
+
+static const uint16_t ud_itab__444[] = {
+ /* 0 */ GROUP(445), 0, 0, 0,
+};
+
+static const uint16_t ud_itab__447[] = {
+ /* 0 */ 0, 475,
+};
+
+static const uint16_t ud_itab__446[] = {
+ /* 0 */ GROUP(447), 0,[...]
[diff truncated at 100000 bytes]
More information about the Cygwin-cvs
mailing list