10c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen/* 20c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen * Copyright (C) 2012 The Android Open Source Project 30c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen * 40c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen * Licensed under the Apache License, Version 2.0 (the "License"); 50c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen * you may not use this file except in compliance with the License. 60c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen * You may obtain a copy of the License at 70c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen * 80c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen * http://www.apache.org/licenses/LICENSE-2.0 90c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen * 100c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen * Unless required by applicable law or agreed to in writing, software 110c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen * distributed under the License is distributed on an "AS IS" BASIS, 120c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen * See the License for the specific language governing permissions and 140c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen * limitations under the License. 150c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen */ 160c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen 170c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen#ifndef _ENCODER_DEFS_EXT_H_ 180c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen#define _ENCODER_DEFS_EXT_H_ 190c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen 200c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen 210c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen// Used to isolate experimental or being tuned encoder into a separate 220c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen// namespace so it can coexist with a stable one in the same bundle. 230c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen#ifdef ENCODER_ISOLATE 240c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen #define ENCODER_NAMESPACE_START namespace enc_ia32 { 250c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen #define ENCODER_NAMESPACE_END }; 260c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen#else 270c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen #define ENCODER_NAMESPACE_START 280c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen #define ENCODER_NAMESPACE_END 290c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen#endif 300c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen 310c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenENCODER_NAMESPACE_START 320c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chentypedef enum OpndSize { 330c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen /** 340c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen * A change must be balanced with at least the following places: 350c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen * Ia32IRConstants.h :: getByteSize() uses some presumptions about OpndSize_ values 360c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen * Ia32::Constraint-s use the OpndSize as a mask 370c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen * encoder.cpp & encoder_master_info.cpp uses OpndSize as an index for hashing 380c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen * - perhaps there are much more places 390c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen */ 400c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen OpndSize_Null = 0, 410c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen OpndSize_8 = 0x01, 420c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen OpndSize_16 = 0x02, 430c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen OpndSize_32 = 0x04, 440c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen OpndSize_64 = 0x08, 450c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen#if !defined(TESTING_ENCODER) 460c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen OpndSize_80 = 0x10, 470c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen OpndSize_128 = 0x20, 480c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen#endif 490c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen OpndSize_Max, 500c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen OpndSize_Any = 0x3F, 510c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen OpndSize_Default = OpndSize_Any 520c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen} OpndSize; 530c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen 540c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen/** 550c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen * Conditional mnemonics. 560c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen * The values match the 'real' (==processor's) values of the appropriate 570c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen * condition values used in the opcodes. 580c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen */ 590c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chentypedef enum ConditionMnemonic { 600c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen 610c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen ConditionMnemonic_O=0, 620c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen ConditionMnemonic_NO=1, 630c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen ConditionMnemonic_B=2, ConditionMnemonic_NAE=ConditionMnemonic_B, ConditionMnemonic_C=ConditionMnemonic_B, 640c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen ConditionMnemonic_NB=3, ConditionMnemonic_AE=ConditionMnemonic_NB, ConditionMnemonic_NC=ConditionMnemonic_NB, 650c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen ConditionMnemonic_Z=4, ConditionMnemonic_E=ConditionMnemonic_Z, 660c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen ConditionMnemonic_NZ=5, ConditionMnemonic_NE=ConditionMnemonic_NZ, 670c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen ConditionMnemonic_BE=6, ConditionMnemonic_NA=ConditionMnemonic_BE, 680c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen ConditionMnemonic_NBE=7, ConditionMnemonic_A=ConditionMnemonic_NBE, 690c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen 700c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen ConditionMnemonic_S=8, 710c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen ConditionMnemonic_NS=9, 720c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen ConditionMnemonic_P=10, ConditionMnemonic_PE=ConditionMnemonic_P, 730c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen ConditionMnemonic_NP=11, ConditionMnemonic_PO=ConditionMnemonic_NP, 740c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen ConditionMnemonic_L=12, ConditionMnemonic_NGE=ConditionMnemonic_L, 750c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen ConditionMnemonic_NL=13, ConditionMnemonic_GE=ConditionMnemonic_NL, 760c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen ConditionMnemonic_LE=14, ConditionMnemonic_NG=ConditionMnemonic_LE, 770c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen ConditionMnemonic_NLE=15, ConditionMnemonic_G=ConditionMnemonic_NLE, 780c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen ConditionMnemonic_Count=16 790c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen} ConditionMnemonic; 800c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen 810c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen 820c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen#define CCM(prefix,cond) Mnemonic_##prefix##cond=Mnemonic_##prefix##cc+ConditionMnemonic_##cond 830c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen 840c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen//========================================================================================================= 850c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chentypedef enum Mnemonic { 860c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen 870c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_NULL=0, Mnemonic_Null=Mnemonic_NULL, 880c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_ADC, // Add with Carry 890c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_ADD, // Add 900c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_ADDSD, // Add Scalar Double-Precision Floating-Point Values 910c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_ADDSS, // Add Scalar Single-Precision Floating-Point Values 920c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_AND, // Logical AND 930c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen 940c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_BSF, // Bit scan forward 950c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_BSR, // Bit scan reverse 960c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen 970c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_CALL, // Call Procedure 980c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_CMC, // Complement Carry Flag 990c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_CWD, Mnemonic_CDQ=Mnemonic_CWD,// Convert Word to Doubleword/Convert Doubleword to Qua T dword 1000c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_CMOVcc, // Conditional Move 1010c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(CMOV,O), 1020c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(CMOV,NO), 1030c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(CMOV,B), CCM(CMOV,NAE), CCM(CMOV,C), 1040c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(CMOV,NB), CCM(CMOV,AE), CCM(CMOV,NC), 1050c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(CMOV,Z), CCM(CMOV,E), 1060c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(CMOV,NZ), CCM(CMOV,NE), 1070c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(CMOV,BE), CCM(CMOV,NA), 1080c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(CMOV,NBE), CCM(CMOV,A), 1090c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen 1100c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(CMOV,S), 1110c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(CMOV,NS), 1120c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(CMOV,P), CCM(CMOV,PE), 1130c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(CMOV,NP), CCM(CMOV,PO), 1140c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(CMOV,L), CCM(CMOV,NGE), 1150c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(CMOV,NL), CCM(CMOV,GE), 1160c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(CMOV,LE), CCM(CMOV,NG), 1170c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(CMOV,NLE), CCM(CMOV,G), 1180c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen 1190c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_CMP, // Compare Two Operands 1200c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_CMPXCHG, // Compare and exchange 1210c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_CMPXCHG8B, // Compare and Exchange 8 Bytes 1220c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_CMPSB, // Compare Two Bytes at DS:ESI and ES:EDI 1230c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_CMPSW, // Compare Two Words at DS:ESI and ES:EDI 1240c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_CMPSD, // Compare Two Doublewords at DS:ESI and ES:EDI 1250c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen// 1260c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen// double -> float 1270c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_CVTSD2SS, // Convert Scalar Double-Precision Floating-Point Value to Scalar Single-Precision Floating-Point Value 1280c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen// double -> I_32 1290c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_CVTSD2SI, // Convert Scalar Double-Precision Floating-Point Value to Doubleword Integer 1300c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen// double [truncated] -> I_32 1310c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_CVTTSD2SI, // Convert with Truncation Scalar Double-Precision Floating-Point Value to Signed Doubleword Integer 1320c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen// 1330c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen// float -> double 1340c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_CVTSS2SD, // Convert Scalar Single-Precision Floating-Point Value to Scalar Double-Precision Floating-Point Value 1350c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen// float -> I_32 1360c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_CVTSS2SI, // Convert Scalar Single-Precision Floating-Point Value to Doubleword Integer 1370c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen// float [truncated] -> I_32 1380c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_CVTTSS2SI, // Convert with Truncation Scalar Single-Precision Floating-Point Value to Doubleword Integer 1390c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen// 1400c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen// I_32 -> double 1410c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_CVTSI2SD, // Convert Doubleword Integer to Scalar Double-Precision Floating-Point Value 1420c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen// I_32 -> float 1430c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_CVTSI2SS, // Convert Doubleword Integer to Scalar Single-Precision Floating-Point Value 1440c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen 1450c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_COMISD, // Compare Scalar Ordered Double-Precision Floating-Point Values and Set EFLAGS 1460c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_COMISS, // Compare Scalar Ordered Single-Precision Floating-Point Values and Set EFLAGS 1470c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_DEC, // Decrement by 1 1480c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen//Mnemonic_DIV, // Unsigned Divide 1490c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_DIVSD, // Divide Scalar Double-Precision Floating-Point Values 1500c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_DIVSS, // Divide Scalar Single-Precision Floating-Point Values 1510c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen 1520c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen#ifdef _HAVE_MMX_ 1530c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_EMMS, // Empty MMX Technology State 1540c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen#endif 1550c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen 1560c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_ENTER, // ENTER-Make Stack Frame for Procedure Parameters 1570c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FLDCW, // Load FPU control word 1580c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FADDP, 1590c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FLDZ, 1600c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FADD, 1610c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FSUBP, 1620c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FSUB, 1630c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FISUB, 1640c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FMUL, 1650c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FMULP, 1660c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FDIVP, 1670c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FDIV, 1680c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FUCOM, 1690c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FUCOMI, 1700c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FUCOMP, 1710c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FUCOMIP, 1720c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FUCOMPP, 1730c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FRNDINT, 1740c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FNSTCW, // Store FPU control word 1750c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FSTSW, // Store FPU status word 1760c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FNSTSW, // Store FPU status word 1770c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen//Mnemonic_FDECSTP, // Decrement Stack-Top Pointer 1780c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FILD, // Load Integer 1790c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FLD, // Load Floating Point Value 1800c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FLDLG2, 1810c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FLDLN2, 1820c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FLD1, 1830c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen 1840c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FCLEX, // Clear Exceptions 1850c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FCHS, // Change sign of ST0 1860c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FNCLEX, // Clear Exceptions 1870c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen 1880c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen//Mnemonic_FINCSTP, // Increment Stack-Top Pointer 1890c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FIST, // Store Integer 1900c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FISTP, // Store Integer, pop FPU stack 1910c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FISTTP, // Store Integer with Truncation 1920c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FPREM, // Partial Remainder 1930c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FPREM1, // Partial Remainder 1940c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FST, // Store Floating Point Value 1950c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FSTP, // Store Floating Point Value and pop the FP stack 1960c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FSQRT, //Computes the square root of the source value in the stack and pop the FP stack 1970c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FABS, //Computes the absolute value of the source value in the stack and pop the FP stack 1980c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FSIN, //Computes the sine of the source value in the stack and pop the FP stack 1990c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FCOS, //Computes the cosine of the source value in the stack and pop the FP stack 2000c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FPTAN, //Computes the tangent of the source value in the stack and pop the FP stack 2010c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FYL2X, 2020c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FYL2XP1, 2030c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_F2XM1, 2040c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FPATAN, 2050c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FXCH, 2060c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_FSCALE, 2070c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen 2080c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_XCHG, 2090c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_DIV, // Unsigned Divide 2100c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_IDIV, // Signed Divide 2110c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_MUL, // Unsigned Multiply 2120c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_IMUL, // Signed Multiply 2130c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_INC, // Increment by 1 2140c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_INT3, // Call break point 2150c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_Jcc, // Jump if Condition Is Met 2160c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(J,O), 2170c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(J,NO), 2180c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(J,B), CCM(J,NAE), CCM(J,C), 2190c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(J,NB), CCM(J,AE), CCM(J,NC), 2200c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(J,Z), CCM(J,E), 2210c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(J,NZ), CCM(J,NE), 2220c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(J,BE), CCM(J,NA), 2230c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(J,NBE), CCM(J,A), 2240c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(J,S), 2250c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(J,NS), 2260c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(J,P), CCM(J,PE), 2270c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(J,NP), CCM(J,PO), 2280c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(J,L), CCM(J,NGE), 2290c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(J,NL), CCM(J,GE), 2300c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(J,LE), CCM(J,NG), 2310c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(J,NLE), CCM(J,G), 2320c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_JMP, // Jump 2330c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_LEA, // Load Effective Address 2340c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_LEAVE, // High Level Procedure Exit 2350c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_LOOP, // Loop according to ECX counter 2360c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_LOOPE, // Loop according to ECX counter 2370c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_LOOPNE, Mnemonic_LOOPNZ = Mnemonic_LOOPNE, // Loop according to ECX 2380c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_LAHF, // Load Flags into AH 2390c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_MOV, // Move 2400c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_MOVD, // Move Double word 2410c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_MOVQ, // Move Quadword 2420c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen/*Mnemonic_MOVS, // Move Data from String to String*/ 2430c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen// MOVS is a special case: see encoding table for more details, 2440c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_MOVS8, Mnemonic_MOVS16, Mnemonic_MOVS32, Mnemonic_MOVS64, 2450c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen// 2460c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_MOVAPD, // Move Scalar Double-Precision Floating-Point Value 2470c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_MOVSD, // Move Scalar Double-Precision Floating-Point Value 2480c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_MOVSS, // Move Scalar Single-Precision Floating-Point Values 2490c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_MOVSX, // Move with Sign-Extension 2500c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_MOVZX, // Move with Zero-Extend 2510c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen//Mnemonic_MUL, // Unsigned Multiply 2520c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_MULSD, // Multiply Scalar Double-Precision Floating-Point Values 2530c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_MULSS, // Multiply Scalar Single-Precision Floating-Point Values 2540c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_NEG, // Two's Complement Negation 2550c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_NOP, // No Operation 2560c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_NOT, // One's Complement Negation 2570c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_OR, // Logical Inclusive OR 2580c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_PREFETCH, // prefetch 2590c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen 2600c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen#if 1 //def _HAVE_MMX_ 2610c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen Mnemonic_PADDQ, // Add Packed Quadword Integers 2620c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen Mnemonic_PAND, // Logical AND 2630c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen Mnemonic_POR, // Bitwise Logical OR 2640c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen Mnemonic_PSUBQ, // Subtract Packed Quadword Integers 2650c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen#endif 2660c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_PANDN, 2670c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_PSLLQ, 2680c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_PSRLQ, 2690c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_PXOR, // Logical Exclusive OR 2700c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_POP, // Pop a Value from the Stack 2710c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_POPFD, // Pop a Value of EFLAGS register from the Stack 2720c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_PUSH, // Push Word or Doubleword Onto the Stack 2730c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_PUSHFD, // Push EFLAGS Doubleword Onto the Stack 2740c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_RET, // Return from Procedure 2750c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen 2760c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_SETcc, // Set Byte on Condition 2770c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(SET,O), 2780c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(SET,NO), 2790c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(SET,B), CCM(SET,NAE), CCM(SET,C), 2800c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(SET,NB), CCM(SET,AE), CCM(SET,NC), 2810c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(SET,Z), CCM(SET,E), 2820c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(SET,NZ), CCM(SET,NE), 2830c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(SET,BE), CCM(SET,NA), 2840c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(SET,NBE), CCM(SET,A), 2850c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(SET,S), 2860c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(SET,NS), 2870c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(SET,P), CCM(SET,PE), 2880c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(SET,NP), CCM(SET,PO), 2890c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(SET,L), CCM(SET,NGE), 2900c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(SET,NL), CCM(SET,GE), 2910c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(SET,LE), CCM(SET,NG), 2920c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen CCM(SET,NLE), CCM(SET,G), 2930c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen 2940c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_SAL, Mnemonic_SHL=Mnemonic_SAL,// Shift left 2950c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_SAR, // Unsigned shift right 2960c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_ROR, // Rotate right 2970c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_RCR, // Rotate right through CARRY flag 2980c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_ROL, // Rotate left 2990c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_RCL, // Rotate left through CARRY flag 3000c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_SHR, // Signed shift right 3010c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_SHRD, // Double Precision Shift Right 3020c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_SHLD, // Double Precision Shift Left 3030c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen 3040c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_SBB, // Integer Subtraction with Borrow 3050c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_SUB, // Subtract 3060c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_SUBSD, // Subtract Scalar Double-Precision Floating-Point Values 3070c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_SUBSS, // Subtract Scalar Single-Precision Floating-Point Values 3080c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen 3090c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_TEST, // Logical Compare 3100c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen 3110c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_UCOMISD, // Unordered Compare Scalar Double-Precision Floating-Point Values and Set EFLAGS 3120c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_UCOMISS, // Unordered Compare Scalar Single-Precision Floating-Point Values and Set EFLAGS 3130c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen 3140c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_XOR, // Logical Exclusive OR 3150c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen// 3160c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen// packed things, 3170c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen// 3180c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_XORPD, // Bitwise Logical XOR for Double-Precision Floating-Point Values 3190c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_XORPS, // Bitwise Logical XOR for Single-Precision Floating-Point Values 3200c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen 3210c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_CVTDQ2PD, // Convert Packed Doubleword Integers to Packed Double-Precision Floating-Point Values 3220c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_CVTTPD2DQ, // Convert with Truncation Packed Double-Precision Floating-Point Values to Packed Doubleword Integers 3230c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen 3240c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_CVTDQ2PS, // Convert Packed Doubleword Integers to Packed Single-Precision Floating-Point Values 3250c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_CVTTPS2DQ, // Convert with Truncation Packed Single-Precision Floating-Point Values to Packed Doubleword Integers 3260c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen// 3270c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen// String operations 3280c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen// 3290c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_STD, // Set direction flag 3300c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_CLD, // Clear direction flag 3310c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_SCAS, // Scan string 3320c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_STOS, // Store string 3330c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen 3340c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen// 3350c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_WAIT, // Check pending pending unmasked floating-point exception 3360c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen// 3370c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenMnemonic_Count 3380c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen} Mnemonic; 3390c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen 3400c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen#undef CCM 3410c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen 3420c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan ChenENCODER_NAMESPACE_END 3430c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen 3440c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen#endif // ifndef _ENCODER_DEFS_EXT_H_ 345