From: Dave Brolley Date: Fri, 13 Nov 1998 00:36:58 +0000 (+0000) Subject: Thu Nov 12 19:24:18 1998 Dave Brolley X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=7a0737c808f6b41e9436201116c948c8473b8f2b;p=binutils-gdb.git Thu Nov 12 19:24:18 1998 Dave Brolley * po/opcodes.pot: Regenerated. * fr30-opc.c: Regenerated. * fr30-opc.h: Regenerated. * fr30-dis.c: Regenerated. * fr30-asm.c: Regenerated. --- diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index a489ac2a98c..0bbb9a26823 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,9 +1,17 @@ +start-sanitize-fr30 +Thu Nov 12 19:24:18 1998 Dave Brolley + + * po/opcodes.pot: Regenerated. + * fr30-opc.c: Regenerated. + * fr30-opc.h: Regenerated. + * fr30-dis.c: Regenerated. + * fr30-asm.c: Regenerated. + Tue Nov 10 15:26:27 1998 Nick Clifton -start-sanitize-fr30 * disassemble.c (disassembler): Add support for FR30 target. + end-sanitize-fr30 - Tue Nov 10 11:00:04 1998 Doug Evans start-sanitize-cygnus diff --git a/opcodes/fr30-asm.c b/opcodes/fr30-asm.c index 461536b7297..22f452cf043 100644 --- a/opcodes/fr30-asm.c +++ b/opcodes/fr30-asm.c @@ -85,6 +85,51 @@ fr30_cgen_parse_operand (od, opindex, strp, fields) case FR30_OPERAND_RJ : errmsg = cgen_parse_keyword (od, strp, & fr30_cgen_opval_h_gr, & fields->f_Rj); break; + case FR30_OPERAND_RS1 : + errmsg = cgen_parse_keyword (od, strp, & fr30_cgen_opval_h_dr, & fields->f_Rs1); + break; + case FR30_OPERAND_RS2 : + errmsg = cgen_parse_keyword (od, strp, & fr30_cgen_opval_h_dr, & fields->f_Rs2); + break; + case FR30_OPERAND_U4 : + errmsg = cgen_parse_unsigned_integer (od, strp, FR30_OPERAND_U4, &fields->f_u4); + break; + case FR30_OPERAND_M4 : + errmsg = cgen_parse_unsigned_integer (od, strp, FR30_OPERAND_M4, &fields->f_m4); + break; + case FR30_OPERAND_I8 : + errmsg = cgen_parse_unsigned_integer (od, strp, FR30_OPERAND_I8, &fields->f_i8); + break; + case FR30_OPERAND_U8 : + errmsg = cgen_parse_unsigned_integer (od, strp, FR30_OPERAND_U8, &fields->f_u8); + break; + case FR30_OPERAND_O8 : + errmsg = cgen_parse_signed_integer (od, strp, FR30_OPERAND_O8, &fields->f_o8); + break; + case FR30_OPERAND_S10 : + errmsg = cgen_parse_signed_integer (od, strp, FR30_OPERAND_S10, &fields->f_s10); + break; + case FR30_OPERAND_U10 : + errmsg = cgen_parse_unsigned_integer (od, strp, FR30_OPERAND_U10, &fields->f_u10); + break; + case FR30_OPERAND_DIR8 : + errmsg = cgen_parse_unsigned_integer (od, strp, FR30_OPERAND_DIR8, &fields->f_dir8); + break; + case FR30_OPERAND_DIR9 : + errmsg = cgen_parse_unsigned_integer (od, strp, FR30_OPERAND_DIR9, &fields->f_dir9); + break; + case FR30_OPERAND_DIR10 : + errmsg = cgen_parse_unsigned_integer (od, strp, FR30_OPERAND_DIR10, &fields->f_dir10); + break; + case FR30_OPERAND_LABEL9 : + errmsg = cgen_parse_signed_integer (od, strp, FR30_OPERAND_LABEL9, &fields->f_rel8); + break; + case FR30_OPERAND_LABEL12 : + errmsg = cgen_parse_signed_integer (od, strp, FR30_OPERAND_LABEL12, &fields->f_rel11); + break; + case FR30_OPERAND_CC : + errmsg = cgen_parse_unsigned_integer (od, strp, FR30_OPERAND_CC, &fields->f_cc); + break; default : /* xgettext:c-format */ @@ -128,6 +173,79 @@ fr30_cgen_insert_operand (od, opindex, fields, buffer, pc) case FR30_OPERAND_RJ : errmsg = insert_normal (od, fields->f_Rj, 0|(1<f_Rs1, 0|(1<f_Rs2, 0|(1<f_u4, 0|(1<f_m4; + value = ((value) & (15)); + errmsg = insert_normal (od, value, 0|(1<f_i8, 0|(1<f_u8, 0|(1<f_o8, 0|(1<f_s10; + value = ((((unsigned int) (value) >> (2))) & (255)); + errmsg = insert_normal (od, value, 0|(1<f_u10; + value = ((((unsigned int) (value) >> (2))) & (255)); + errmsg = insert_normal (od, value, 0|(1<f_dir8, 0|(1<f_dir9; + value = ((((unsigned int) (value) >> (1))) & (255)); + errmsg = insert_normal (od, value, 0|(1<f_dir10; + value = ((((unsigned int) (value) >> (2))) & (255)); + errmsg = insert_normal (od, value, 0|(1<f_rel8; + value = ((((unsigned int) (value) >> (1))) & (255)); + errmsg = insert_normal (od, value, 0|(1<f_rel11; + value = ((((unsigned int) (value) >> (1))) & (2047)); + errmsg = insert_normal (od, value, 0|(1<f_cc, 0|(1<f_Rj); break; + case FR30_OPERAND_RS1 : + length = extract_normal (od, ex_info, insn_value, 0|(1<f_Rs1); + break; + case FR30_OPERAND_RS2 : + length = extract_normal (od, ex_info, insn_value, 0|(1<f_Rs2); + break; + case FR30_OPERAND_U4 : + length = extract_normal (od, ex_info, insn_value, 0|(1<f_u4); + break; + case FR30_OPERAND_M4 : + { + long value; + length = extract_normal (od, ex_info, insn_value, 0|(1<f_m4 = value; + } + break; + case FR30_OPERAND_I8 : + length = extract_normal (od, ex_info, insn_value, 0|(1<f_i8); + break; + case FR30_OPERAND_U8 : + length = extract_normal (od, ex_info, insn_value, 0|(1<f_u8); + break; + case FR30_OPERAND_O8 : + length = extract_normal (od, ex_info, insn_value, 0|(1<f_o8); + break; + case FR30_OPERAND_S10 : + { + long value; + length = extract_normal (od, ex_info, insn_value, 0|(1<f_s10 = value; + } + break; + case FR30_OPERAND_U10 : + { + long value; + length = extract_normal (od, ex_info, insn_value, 0|(1<f_u10 = value; + } + break; + case FR30_OPERAND_DIR8 : + length = extract_normal (od, ex_info, insn_value, 0|(1<f_dir8); + break; + case FR30_OPERAND_DIR9 : + { + long value; + length = extract_normal (od, ex_info, insn_value, 0|(1<f_dir9 = value; + } + break; + case FR30_OPERAND_DIR10 : + { + long value; + length = extract_normal (od, ex_info, insn_value, 0|(1<f_dir10 = value; + } + break; + case FR30_OPERAND_LABEL9 : + { + long value; + length = extract_normal (od, ex_info, insn_value, 0|(1<f_rel8 = value; + } + break; + case FR30_OPERAND_LABEL12 : + { + long value; + length = extract_normal (od, ex_info, insn_value, 0|(1<f_rel11 = value; + } + break; + case FR30_OPERAND_CC : + length = extract_normal (od, ex_info, insn_value, 0|(1<f_cc); + break; default : /* xgettext:c-format */ @@ -138,6 +218,51 @@ fr30_cgen_print_operand (od, opindex, info, fields, attrs, pc, length) case FR30_OPERAND_RJ : print_keyword (od, info, & fr30_cgen_opval_h_gr, fields->f_Rj, 0|(1<f_Rs1, 0|(1<f_Rs2, 0|(1<f_u4, 0|(1<f_m4, 0|(1<f_i8, 0|(1<f_u8, 0|(1<f_o8, 0|(1<f_s10, 0|(1<f_u10, 0|(1<f_dir8, 0|(1<f_dir9, 0|(1<f_dir10, 0|(1<f_rel8, 0|(1<f_rel11, 0|(1<f_cc, 0|(1<f_Rj; break; + case FR30_OPERAND_RS1 : + value = fields->f_Rs1; + break; + case FR30_OPERAND_RS2 : + value = fields->f_Rs2; + break; + case FR30_OPERAND_U4 : + value = fields->f_u4; + break; + case FR30_OPERAND_M4 : + value = fields->f_m4; + break; + case FR30_OPERAND_I8 : + value = fields->f_i8; + break; + case FR30_OPERAND_U8 : + value = fields->f_u8; + break; + case FR30_OPERAND_O8 : + value = fields->f_o8; + break; + case FR30_OPERAND_S10 : + value = fields->f_s10; + break; + case FR30_OPERAND_U10 : + value = fields->f_u10; + break; + case FR30_OPERAND_DIR8 : + value = fields->f_dir8; + break; + case FR30_OPERAND_DIR9 : + value = fields->f_dir9; + break; + case FR30_OPERAND_DIR10 : + value = fields->f_dir10; + break; + case FR30_OPERAND_LABEL9 : + value = fields->f_rel8; + break; + case FR30_OPERAND_LABEL12 : + value = fields->f_rel11; + break; + case FR30_OPERAND_CC : + value = fields->f_cc; + break; default : /* xgettext:c-format */ @@ -658,6 +2071,51 @@ fr30_cgen_get_vma_operand (opindex, fields) case FR30_OPERAND_RJ : value = fields->f_Rj; break; + case FR30_OPERAND_RS1 : + value = fields->f_Rs1; + break; + case FR30_OPERAND_RS2 : + value = fields->f_Rs2; + break; + case FR30_OPERAND_U4 : + value = fields->f_u4; + break; + case FR30_OPERAND_M4 : + value = fields->f_m4; + break; + case FR30_OPERAND_I8 : + value = fields->f_i8; + break; + case FR30_OPERAND_U8 : + value = fields->f_u8; + break; + case FR30_OPERAND_O8 : + value = fields->f_o8; + break; + case FR30_OPERAND_S10 : + value = fields->f_s10; + break; + case FR30_OPERAND_U10 : + value = fields->f_u10; + break; + case FR30_OPERAND_DIR8 : + value = fields->f_dir8; + break; + case FR30_OPERAND_DIR9 : + value = fields->f_dir9; + break; + case FR30_OPERAND_DIR10 : + value = fields->f_dir10; + break; + case FR30_OPERAND_LABEL9 : + value = fields->f_rel8; + break; + case FR30_OPERAND_LABEL12 : + value = fields->f_rel11; + break; + case FR30_OPERAND_CC : + value = fields->f_cc; + break; default : /* xgettext:c-format */ @@ -688,6 +2146,51 @@ fr30_cgen_set_int_operand (opindex, fields, value) case FR30_OPERAND_RJ : fields->f_Rj = value; break; + case FR30_OPERAND_RS1 : + fields->f_Rs1 = value; + break; + case FR30_OPERAND_RS2 : + fields->f_Rs2 = value; + break; + case FR30_OPERAND_U4 : + fields->f_u4 = value; + break; + case FR30_OPERAND_M4 : + fields->f_m4 = value; + break; + case FR30_OPERAND_I8 : + fields->f_i8 = value; + break; + case FR30_OPERAND_U8 : + fields->f_u8 = value; + break; + case FR30_OPERAND_O8 : + fields->f_o8 = value; + break; + case FR30_OPERAND_S10 : + fields->f_s10 = value; + break; + case FR30_OPERAND_U10 : + fields->f_u10 = value; + break; + case FR30_OPERAND_DIR8 : + fields->f_dir8 = value; + break; + case FR30_OPERAND_DIR9 : + fields->f_dir9 = value; + break; + case FR30_OPERAND_DIR10 : + fields->f_dir10 = value; + break; + case FR30_OPERAND_LABEL9 : + fields->f_rel8 = value; + break; + case FR30_OPERAND_LABEL12 : + fields->f_rel11 = value; + break; + case FR30_OPERAND_CC : + fields->f_cc = value; + break; default : /* xgettext:c-format */ @@ -711,6 +2214,51 @@ fr30_cgen_set_vma_operand (opindex, fields, value) case FR30_OPERAND_RJ : fields->f_Rj = value; break; + case FR30_OPERAND_RS1 : + fields->f_Rs1 = value; + break; + case FR30_OPERAND_RS2 : + fields->f_Rs2 = value; + break; + case FR30_OPERAND_U4 : + fields->f_u4 = value; + break; + case FR30_OPERAND_M4 : + fields->f_m4 = value; + break; + case FR30_OPERAND_I8 : + fields->f_i8 = value; + break; + case FR30_OPERAND_U8 : + fields->f_u8 = value; + break; + case FR30_OPERAND_O8 : + fields->f_o8 = value; + break; + case FR30_OPERAND_S10 : + fields->f_s10 = value; + break; + case FR30_OPERAND_U10 : + fields->f_u10 = value; + break; + case FR30_OPERAND_DIR8 : + fields->f_dir8 = value; + break; + case FR30_OPERAND_DIR9 : + fields->f_dir9 = value; + break; + case FR30_OPERAND_DIR10 : + fields->f_dir10 = value; + break; + case FR30_OPERAND_LABEL9 : + fields->f_rel8 = value; + break; + case FR30_OPERAND_LABEL12 : + fields->f_rel11 = value; + break; + case FR30_OPERAND_CC : + fields->f_cc = value; + break; default : /* xgettext:c-format */ diff --git a/opcodes/fr30-opc.h b/opcodes/fr30-opc.h index eb2dac9857b..2a8259aae18 100644 --- a/opcodes/fr30-opc.h +++ b/opcodes/fr30-opc.h @@ -80,11 +80,24 @@ typedef enum insn_op3 { , OP3_C, OP3_D, OP3_E, OP3_F } INSN_OP3; +/* Enum declaration for insn op4 enums. */ +typedef enum insn_op4 { + OP4_0 +} INSN_OP4; + /* Enum declaration for insn op5 enums. */ typedef enum insn_op5 { OP5_0, OP5_1 } INSN_OP5; +/* Enum declaration for insn cc enums. */ +typedef enum insn_cc { + CC_RA, CC_NO, CC_EQ, CC_NE + , CC_C, CC_NC, CC_N, CC_P + , CC_V, CC_NV, CC_LT, CC_GE + , CC_LE, CC_GT, CC_LS, CC_HI +} INSN_CC; + /* Enum declaration for general registers. */ typedef enum h_gr { H_GR_AC = 13, H_GR_FP = 14, H_GR_SP = 15, H_GR_R0 = 0 @@ -97,13 +110,9 @@ typedef enum h_gr { /* Enum declaration for dedicated registers. */ typedef enum h_dr { H_DR_TBR, H_DR_RP, H_DR_SSP, H_DR_USP + , H_DR_MDH, H_DR_MDL } H_DR; -/* Enum declaration for multiplication and division registers. */ -typedef enum h_mdr { - H_MDR_MDH = 4, H_MDR_MDL = 5 -} H_MDR; - /* Enum declaration for control registers. */ typedef enum h_cr { H_CR_PC, H_CR_PS @@ -111,7 +120,11 @@ typedef enum h_cr { /* Enum declaration for fr30 operand types. */ typedef enum cgen_operand_type { - FR30_OPERAND_PC, FR30_OPERAND_RI, FR30_OPERAND_RJ, FR30_OPERAND_NBIT + FR30_OPERAND_PC, FR30_OPERAND_RI, FR30_OPERAND_RJ, FR30_OPERAND_RS1 + , FR30_OPERAND_RS2, FR30_OPERAND_PS, FR30_OPERAND_U4, FR30_OPERAND_M4 + , FR30_OPERAND_I8, FR30_OPERAND_U8, FR30_OPERAND_O8, FR30_OPERAND_S10 + , FR30_OPERAND_U10, FR30_OPERAND_DIR8, FR30_OPERAND_DIR9, FR30_OPERAND_DIR10 + , FR30_OPERAND_LABEL9, FR30_OPERAND_LABEL12, FR30_OPERAND_CC, FR30_OPERAND_NBIT , FR30_OPERAND_VBIT, FR30_OPERAND_ZBIT, FR30_OPERAND_CBIT, FR30_OPERAND_MAX } CGEN_OPERAND_TYPE; @@ -129,13 +142,13 @@ typedef enum mach_attr { #define MAX_OPERANDS ((int) FR30_OPERAND_MAX) /* Maximum number of operands referenced by any insn. */ -#define MAX_OPERAND_INSTANCES 7 +#define MAX_OPERAND_INSTANCES 8 /* Hardware, operand and instruction attribute indices. */ /* Enum declaration for cgen_hw attrs. */ typedef enum cgen_hw_attr { - CGEN_HW_CACHE_ADDR, CGEN_HW_FUN_ACCESS, CGEN_HW_PC, CGEN_HW_PROFILE + CGEN_HW_CACHE_ADDR, CGEN_HW_PC, CGEN_HW_PROFILE } CGEN_HW_ATTR; /* Number of non-boolean elements in cgen_hw. */ @@ -143,8 +156,9 @@ typedef enum cgen_hw_attr { /* Enum declaration for cgen_operand attrs. */ typedef enum cgen_operand_attr { - CGEN_OPERAND_ABS_ADDR, CGEN_OPERAND_NEGATIVE, CGEN_OPERAND_PCREL_ADDR, CGEN_OPERAND_RELAX - , CGEN_OPERAND_SEM_ONLY, CGEN_OPERAND_SIGN_OPT, CGEN_OPERAND_UNSIGNED + CGEN_OPERAND_ABS_ADDR, CGEN_OPERAND_HASH_PREFIX, CGEN_OPERAND_NEGATIVE, CGEN_OPERAND_PCREL_ADDR + , CGEN_OPERAND_RELAX, CGEN_OPERAND_SEM_ONLY, CGEN_OPERAND_SIGN_OPT, CGEN_OPERAND_SIGNED + , CGEN_OPERAND_UNSIGNED } CGEN_OPERAND_ATTR; /* Number of non-boolean elements in cgen_operand. */ @@ -161,7 +175,41 @@ typedef enum cgen_insn_attr { /* Enum declaration for fr30 instruction types. */ typedef enum cgen_insn_type { - FR30_INSN_INVALID, FR30_INSN_ADD, FR30_INSN_MAX + FR30_INSN_INVALID, FR30_INSN_ADD, FR30_INSN_ADDI, FR30_INSN_ADD2 + , FR30_INSN_ADDC, FR30_INSN_ADDN, FR30_INSN_ADDNI, FR30_INSN_ADDN2 + , FR30_INSN_SUB, FR30_INSN_SUBC, FR30_INSN_SUBN, FR30_INSN_CMP + , FR30_INSN_CMPI, FR30_INSN_CMP2, FR30_INSN_AND, FR30_INSN_OR + , FR30_INSN_EOR, FR30_INSN_ANDM, FR30_INSN_ANDH, FR30_INSN_ANDB + , FR30_INSN_ORM, FR30_INSN_ORH, FR30_INSN_ORB, FR30_INSN_EORM + , FR30_INSN_EORH, FR30_INSN_EORB, FR30_INSN_BANDL, FR30_INSN_BORL + , FR30_INSN_BEORL, FR30_INSN_BANDH, FR30_INSN_BORH, FR30_INSN_BEORH + , FR30_INSN_BTSTL, FR30_INSN_BTSTH, FR30_INSN_MUL, FR30_INSN_MULU + , FR30_INSN_MULH, FR30_INSN_MULUH, FR30_INSN_DIV0S, FR30_INSN_DIV0U + , FR30_INSN_DIV1, FR30_INSN_DIV2, FR30_INSN_DIV3, FR30_INSN_DIV4S + , FR30_INSN_LSL, FR30_INSN_LSLI, FR30_INSN_LSL2, FR30_INSN_LSR + , FR30_INSN_LSRI, FR30_INSN_LSR2, FR30_INSN_ASR, FR30_INSN_ASRI + , FR30_INSN_ASR2, FR30_INSN_LDI_8, FR30_INSN_LD, FR30_INSN_LDUH + , FR30_INSN_LDUB, FR30_INSN_LDR13, FR30_INSN_LDR13UH, FR30_INSN_LDR13UB + , FR30_INSN_LDR14, FR30_INSN_LDR14UH, FR30_INSN_LDR14UB, FR30_INSN_LDR15 + , FR30_INSN_LDR15GR, FR30_INSN_LDR15DR, FR30_INSN_LDR15PS, FR30_INSN_ST + , FR30_INSN_STH, FR30_INSN_STB, FR30_INSN_STR13, FR30_INSN_STR13H + , FR30_INSN_STR13B, FR30_INSN_STR14, FR30_INSN_STR14H, FR30_INSN_STR14B + , FR30_INSN_STR15, FR30_INSN_STR15GR, FR30_INSN_STR15DR, FR30_INSN_STR15PS + , FR30_INSN_MOV, FR30_INSN_MOVDR, FR30_INSN_MOVPS, FR30_INSN_MOV2DR + , FR30_INSN_MOV2PS, FR30_INSN_JMP, FR30_INSN_CALL, FR30_INSN_CALLR + , FR30_INSN_RET, FR30_INSN_INT, FR30_INSN_INTE, FR30_INSN_RETI + , FR30_INSN_BRA, FR30_INSN_BNO, FR30_INSN_BEQ, FR30_INSN_BNE + , FR30_INSN_BC, FR30_INSN_BNC, FR30_INSN_BN, FR30_INSN_BP + , FR30_INSN_BV, FR30_INSN_BNV, FR30_INSN_BLT, FR30_INSN_BGE + , FR30_INSN_BLE, FR30_INSN_BGT, FR30_INSN_BLS, FR30_INSN_BHI + , FR30_INSN_DMOV2R13, FR30_INSN_DMOV2R13H, FR30_INSN_DMOV2R13B, FR30_INSN_DMOVR13 + , FR30_INSN_DMOVR13H, FR30_INSN_DMOVR13B, FR30_INSN_DMOV2R13PI, FR30_INSN_DMOV2R13PIH + , FR30_INSN_DMOV2R13PIB, FR30_INSN_DMOV13PI, FR30_INSN_DMOV13PIH, FR30_INSN_DMOV13PIB + , FR30_INSN_DMOV2R15PD, FR30_INSN_DMOV15PI, FR30_INSN_LDRES, FR30_INSN_STRES + , FR30_INSN_NOP, FR30_INSN_ANDCCR, FR30_INSN_ORCCR, FR30_INSN_STILM + , FR30_INSN_ADDSP, FR30_INSN_EXTSB, FR30_INSN_EXTUB, FR30_INSN_EXTSH + , FR30_INSN_EXTUH, FR30_INSN_ENTER, FR30_INSN_LEAVE, FR30_INSN_XCHB + , FR30_INSN_MAX } CGEN_INSN_TYPE; /* Index of `invalid' insn place holder. */ @@ -179,18 +227,25 @@ struct cgen_fields long f_op1; long f_op2; long f_op3; + long f_op4; long f_op5; + long f_cc; long f_Rj; long f_Ri; - long f_Rs; + long f_Rs1; + long f_Rs2; long f_u4; long f_i4; long f_m4; long f_u8; long f_i8; long f_o8; + long f_s10; + long f_u10; long f_rel8; - long f_dir; + long f_dir8; + long f_dir9; + long f_dir10; long f_rlist; long f_rel11; int length; @@ -205,8 +260,8 @@ extern const CGEN_ATTR_TABLE fr30_cgen_insn_attr_table[]; typedef enum hw_type { HW_H_PC, HW_H_MEMORY, HW_H_SINT, HW_H_UINT , HW_H_ADDR, HW_H_IADDR, HW_H_GR, HW_H_DR - , HW_H_MDR, HW_H_CR, HW_H_NBIT, HW_H_ZBIT - , HW_H_VBIT, HW_H_CBIT, HW_MAX + , HW_H_CR, HW_H_NBIT, HW_H_ZBIT, HW_H_VBIT + , HW_H_CBIT, HW_MAX } HW_TYPE; #define MAX_HW ((int) HW_MAX) @@ -215,7 +270,6 @@ typedef enum hw_type { extern CGEN_KEYWORD fr30_cgen_opval_h_gr; extern CGEN_KEYWORD fr30_cgen_opval_h_dr; -extern CGEN_KEYWORD fr30_cgen_opval_h_mdr; extern CGEN_KEYWORD fr30_cgen_opval_h_cr; #define CGEN_INIT_PARSE(od) \