📄 irdefs.c
字号:
/*---------------------------------------------------------------*//*--- ---*//*--- This file (ir/irdefs.c) is ---*//*--- Copyright (C) OpenWorks LLP. All rights reserved. ---*//*--- ---*//*---------------------------------------------------------------*//* This file is part of LibVEX, a library for dynamic binary instrumentation and translation. Copyright (C) 2004-2006 OpenWorks LLP. All rights reserved. This library is made available under a dual licensing scheme. If you link LibVEX against other code all of which is itself licensed under the GNU General Public License, version 2 dated June 1991 ("GPL v2"), then you may use LibVEX under the terms of the GPL v2, as appearing in the file LICENSE.GPL. If the file LICENSE.GPL is missing, you can obtain a copy of the GPL v2 from the Free Software Foundation Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. For any other uses of LibVEX, you must first obtain a commercial license from OpenWorks LLP. Please contact info@open-works.co.uk for information about commercial licensing. This software is provided by OpenWorks LLP "as is" and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. In no event shall OpenWorks LLP be liable for any direct, indirect, incidental, special, exemplary, or consequential damages (including, but not limited to, procurement of substitute goods or services; loss of use, data, or profits; or business interruption) however caused and on any theory of liability, whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way out of the use of this software, even if advised of the possibility of such damage. Neither the names of the U.S. Department of Energy nor the University of California nor the names of its contributors may be used to endorse or promote products derived from this software without prior written permission.*/#include "libvex_basictypes.h"#include "libvex_ir.h"#include "libvex.h"#include "main/vex_util.h"/*---------------------------------------------------------------*//*--- Printing the IR ---*//*---------------------------------------------------------------*/void ppIRType ( IRType ty ){ switch (ty) { case Ity_INVALID: vex_printf("Ity_INVALID"); break; case Ity_I1: vex_printf( "I1"); break; case Ity_I8: vex_printf( "I8"); break; case Ity_I16: vex_printf( "I16"); break; case Ity_I32: vex_printf( "I32"); break; case Ity_I64: vex_printf( "I64"); break; case Ity_I128: vex_printf( "I128"); break; case Ity_F32: vex_printf( "F32"); break; case Ity_F64: vex_printf( "F64"); break; case Ity_V128: vex_printf( "V128"); break; default: vex_printf("ty = 0x%x\n", (Int)ty); vpanic("ppIRType"); }}void ppIRConst ( IRConst* con ){ union { ULong i64; Double f64; } u; vassert(sizeof(ULong) == sizeof(Double)); switch (con->tag) { case Ico_U1: vex_printf( "%d:I1", con->Ico.U1 ? 1 : 0); break; case Ico_U8: vex_printf( "0x%x:I8", (UInt)(con->Ico.U8)); break; case Ico_U16: vex_printf( "0x%x:I16", (UInt)(con->Ico.U16)); break; case Ico_U32: vex_printf( "0x%x:I32", (UInt)(con->Ico.U32)); break; case Ico_U64: vex_printf( "0x%llx:I64", (ULong)(con->Ico.U64)); break; case Ico_F64: u.f64 = con->Ico.F64; vex_printf( "F64{0x%llx}", u.i64); break; case Ico_F64i: vex_printf( "F64i{0x%llx}", con->Ico.F64i); break; case Ico_V128: vex_printf( "V128{0x%04x}", (UInt)(con->Ico.V128)); break; default: vpanic("ppIRConst"); }}void ppIRCallee ( IRCallee* ce ){ vex_printf("%s", ce->name); if (ce->regparms > 0) vex_printf("[rp=%d]", ce->regparms); if (ce->mcx_mask > 0) vex_printf("[mcx=0x%x]", ce->mcx_mask); vex_printf("{%p}", (void*)ce->addr);}void ppIRArray ( IRArray* arr ){ vex_printf("(%d:%dx", arr->base, arr->nElems); ppIRType(arr->elemTy); vex_printf(")");}void ppIRTemp ( IRTemp tmp ){ if (tmp == IRTemp_INVALID) vex_printf("IRTemp_INVALID"); else vex_printf( "t%d", (Int)tmp);}void ppIROp ( IROp op ){ HChar* str; IROp base; switch (op) { case Iop_Add8 ... Iop_Add64: str = "Add"; base = Iop_Add8; break; case Iop_Sub8 ... Iop_Sub64: str = "Sub"; base = Iop_Sub8; break; case Iop_Mul8 ... Iop_Mul64: str = "Mul"; base = Iop_Mul8; break; case Iop_Or8 ... Iop_Or64: str = "Or"; base = Iop_Or8; break; case Iop_And8 ... Iop_And64: str = "And"; base = Iop_And8; break; case Iop_Xor8 ... Iop_Xor64: str = "Xor"; base = Iop_Xor8; break; case Iop_Shl8 ... Iop_Shl64: str = "Shl"; base = Iop_Shl8; break; case Iop_Shr8 ... Iop_Shr64: str = "Shr"; base = Iop_Shr8; break; case Iop_Sar8 ... Iop_Sar64: str = "Sar"; base = Iop_Sar8; break; case Iop_CmpEQ8 ... Iop_CmpEQ64: str = "CmpEQ"; base = Iop_CmpEQ8; break; case Iop_CmpNE8 ... Iop_CmpNE64: str = "CmpNE"; base = Iop_CmpNE8; break; case Iop_Not8 ... Iop_Not64: str = "Not"; base = Iop_Not8; break; /* other cases must explicitly "return;" */ case Iop_8Uto16: vex_printf("8Uto16"); return; case Iop_8Uto32: vex_printf("8Uto32"); return; case Iop_16Uto32: vex_printf("16Uto32"); return; case Iop_8Sto16: vex_printf("8Sto16"); return; case Iop_8Sto32: vex_printf("8Sto32"); return; case Iop_16Sto32: vex_printf("16Sto32"); return; case Iop_32Sto64: vex_printf("32Sto64"); return; case Iop_32Uto64: vex_printf("32Uto64"); return; case Iop_32to8: vex_printf("32to8"); return; case Iop_16Uto64: vex_printf("16Uto64"); return; case Iop_16Sto64: vex_printf("16Sto64"); return; case Iop_8Uto64: vex_printf("8Uto64"); return; case Iop_8Sto64: vex_printf("8Sto64"); return; case Iop_64to16: vex_printf("64to16"); return; case Iop_64to8: vex_printf("64to8"); return; case Iop_Not1: vex_printf("Not1"); return; case Iop_32to1: vex_printf("32to1"); return; case Iop_64to1: vex_printf("64to1"); return; case Iop_1Uto8: vex_printf("1Uto8"); return; case Iop_1Uto32: vex_printf("1Uto32"); return; case Iop_1Uto64: vex_printf("1Uto64"); return; case Iop_1Sto8: vex_printf("1Sto8"); return; case Iop_1Sto16: vex_printf("1Sto16"); return; case Iop_1Sto32: vex_printf("1Sto32"); return; case Iop_1Sto64: vex_printf("1Sto64"); return; case Iop_MullS8: vex_printf("MullS8"); return; case Iop_MullS16: vex_printf("MullS16"); return; case Iop_MullS32: vex_printf("MullS32"); return; case Iop_MullS64: vex_printf("MullS64"); return; case Iop_MullU8: vex_printf("MullU8"); return; case Iop_MullU16: vex_printf("MullU16"); return; case Iop_MullU32: vex_printf("MullU32"); return; case Iop_MullU64: vex_printf("MullU64"); return; case Iop_Clz64: vex_printf("Clz64"); return; case Iop_Clz32: vex_printf("Clz32"); return; case Iop_Ctz64: vex_printf("Ctz64"); return; case Iop_Ctz32: vex_printf("Ctz32"); return; case Iop_CmpLT32S: vex_printf("CmpLT32S"); return; case Iop_CmpLE32S: vex_printf("CmpLE32S"); return; case Iop_CmpLT32U: vex_printf("CmpLT32U"); return; case Iop_CmpLE32U: vex_printf("CmpLE32U"); return; case Iop_CmpLT64S: vex_printf("CmpLT64S"); return; case Iop_CmpLE64S: vex_printf("CmpLE64S"); return; case Iop_CmpLT64U: vex_printf("CmpLT64U"); return; case Iop_CmpLE64U: vex_printf("CmpLE64U"); return; case Iop_CmpNEZ8: vex_printf("CmpNEZ8"); return; case Iop_CmpNEZ16: vex_printf("CmpNEZ16"); return; case Iop_CmpNEZ32: vex_printf("CmpNEZ32"); return; case Iop_CmpNEZ64: vex_printf("CmpNEZ64"); return; case Iop_CmpORD32U: vex_printf("CmpORD32U"); return; case Iop_CmpORD32S: vex_printf("CmpORD32S"); return; case Iop_CmpORD64U: vex_printf("CmpORD64U"); return; case Iop_CmpORD64S: vex_printf("CmpORD64S"); return; case Iop_Neg8: vex_printf("Neg8"); return; case Iop_Neg16: vex_printf("Neg16"); return; case Iop_Neg32: vex_printf("Neg32"); return; case Iop_Neg64: vex_printf("Neg64"); return; case Iop_DivU32: vex_printf("DivU32"); return; case Iop_DivS32: vex_printf("DivS32"); return; case Iop_DivU64: vex_printf("DivU64"); return; case Iop_DivS64: vex_printf("DivS64"); return; case Iop_DivModU64to32: vex_printf("DivModU64to32"); return; case Iop_DivModS64to32: vex_printf("DivModS64to32"); return; case Iop_DivModU128to64: vex_printf("DivModU128to64"); return; case Iop_DivModS128to64: vex_printf("DivModS128to64"); return; case Iop_16HIto8: vex_printf("16HIto8"); return; case Iop_16to8: vex_printf("16to8"); return; case Iop_8HLto16: vex_printf("8HLto16"); return; case Iop_32HIto16: vex_printf("32HIto16"); return; case Iop_32to16: vex_printf("32to16"); return; case Iop_16HLto32: vex_printf("16HLto32"); return; case Iop_64HIto32: vex_printf("64HIto32"); return; case Iop_64to32: vex_printf("64to32"); return; case Iop_32HLto64: vex_printf("32HLto64"); return; case Iop_128HIto64: vex_printf("128HIto64"); return; case Iop_128to64: vex_printf("128to64"); return; case Iop_64HLto128: vex_printf("64HLto128"); return; case Iop_AddF64: vex_printf("AddF64"); return; case Iop_SubF64: vex_printf("SubF64"); return; case Iop_MulF64: vex_printf("MulF64"); return; case Iop_DivF64: vex_printf("DivF64"); return; case Iop_AddF64r32: vex_printf("AddF64r32"); return; case Iop_SubF64r32: vex_printf("SubF64r32"); return; case Iop_MulF64r32: vex_printf("MulF64r32"); return; case Iop_DivF64r32: vex_printf("DivF64r32"); return; case Iop_ScaleF64: vex_printf("ScaleF64"); return; case Iop_AtanF64: vex_printf("AtanF64"); return; case Iop_Yl2xF64: vex_printf("Yl2xF64"); return; case Iop_Yl2xp1F64: vex_printf("Yl2xp1F64"); return; case Iop_PRemF64: vex_printf("PRemF64"); return; case Iop_PRemC3210F64: vex_printf("PRemC3210F64"); return; case Iop_PRem1F64: vex_printf("PRem1F64"); return; case Iop_PRem1C3210F64: vex_printf("PRem1C3210F64"); return; case Iop_NegF64: vex_printf("NegF64"); return; case Iop_SqrtF64: vex_printf("SqrtF64"); return; case Iop_AbsF64: vex_printf("AbsF64"); return; case Iop_SinF64: vex_printf("SinF64"); return; case Iop_CosF64: vex_printf("CosF64"); return; case Iop_TanF64: vex_printf("TanF64"); return; case Iop_2xm1F64: vex_printf("2xm1F64"); return; case Iop_MAddF64: vex_printf("MAddF64"); return; case Iop_MSubF64: vex_printf("MSubF64"); return; case Iop_MAddF64r32: vex_printf("MAddF64r32"); return; case Iop_MSubF64r32: vex_printf("MSubF64r32"); return; case Iop_Est5FRSqrt: vex_printf("Est5FRSqrt"); return; case Iop_TruncF64asF32: vex_printf("TruncF64asF32"); return; case Iop_CalcFPRF: vex_printf("CalcFPRF"); case Iop_CmpF64: vex_printf("CmpF64"); return; case Iop_F64toI16: vex_printf("F64toI16"); return; case Iop_F64toI32: vex_printf("F64toI32"); return; case Iop_F64toI64: vex_printf("F64toI64"); return; case Iop_I16toF64: vex_printf("I16toF64"); return; case Iop_I32toF64: vex_printf("I32toF64"); return; case Iop_I64toF64: vex_printf("I64toF64"); return; case Iop_F32toF64: vex_printf("F32toF64"); return; case Iop_F64toF32: vex_printf("F64toF32"); return; case Iop_RoundF64toInt: vex_printf("RoundF64toInt"); return; case Iop_RoundF64toF32: vex_printf("RoundF64toF32"); return; case Iop_ReinterpF64asI64: vex_printf("ReinterpF64asI64"); return; case Iop_ReinterpI64asF64: vex_printf("ReinterpI64asF64"); return; case Iop_ReinterpI32asF32: vex_printf("ReinterpI32asF32"); return; case Iop_I32UtoFx4: vex_printf("Iop_I32UtoFx4"); return; case Iop_I32StoFx4: vex_printf("Iop_I32StoFx4"); return; case Iop_QFtoI32Ux4_RZ: vex_printf("Iop_QFtoI32Ux4_RZ"); return; case Iop_QFtoI32Sx4_RZ: vex_printf("Iop_QFtoI32Sx4_RZ"); return; case Iop_RoundF32x4_RM: vex_printf("Iop_RoundF32x4_RM"); return; case Iop_RoundF32x4_RP: vex_printf("Iop_RoundF32x4_RP"); return; case Iop_RoundF32x4_RN: vex_printf("Iop_RoundF32x4_RN"); return; case Iop_RoundF32x4_RZ: vex_printf("Iop_RoundF32x4_RZ"); return; case Iop_Add8x8: vex_printf("Add8x8"); return; case Iop_Add16x4: vex_printf("Add16x4"); return; case Iop_Add32x2: vex_printf("Add32x2"); return; case Iop_QAdd8Ux8: vex_printf("QAdd8Ux8"); return; case Iop_QAdd16Ux4: vex_printf("QAdd16Ux4"); return; case Iop_QAdd8Sx8: vex_printf("QAdd8Sx8"); return; case Iop_QAdd16Sx4: vex_printf("QAdd16Sx4"); return; case Iop_Sub8x8: vex_printf("Sub8x8"); return; case Iop_Sub16x4: vex_printf("Sub16x4"); return; case Iop_Sub32x2: vex_printf("Sub32x2"); return; case Iop_QSub8Ux8: vex_printf("QSub8Ux8"); return; case Iop_QSub16Ux4: vex_printf("QSub16Ux4"); return; case Iop_QSub8Sx8: vex_printf("QSub8Sx8"); return; case Iop_QSub16Sx4: vex_printf("QSub16Sx4"); return; case Iop_Mul16x4: vex_printf("Mul16x4"); return; case Iop_MulHi16Ux4: vex_printf("MulHi16Ux4"); return; case Iop_MulHi16Sx4: vex_printf("MulHi16Sx4"); return; case Iop_Avg8Ux8: vex_printf("Avg8Ux8"); return; case Iop_Avg16Ux4: vex_printf("Avg16Ux4"); return; case Iop_Max16Sx4: vex_printf("Max16Sx4"); return; case Iop_Max8Ux8: vex_printf("Max8Ux8"); return; case Iop_Min16Sx4: vex_printf("Min16Sx4"); return; case Iop_Min8Ux8: vex_printf("Min8Ux8"); return; case Iop_CmpEQ8x8: vex_printf("CmpEQ8x8"); return; case Iop_CmpEQ16x4: vex_printf("CmpEQ16x4"); return; case Iop_CmpEQ32x2: vex_printf("CmpEQ32x2"); return; case Iop_CmpGT8Sx8: vex_printf("CmpGT8Sx8"); return; case Iop_CmpGT16Sx4: vex_printf("CmpGT16Sx4"); return; case Iop_CmpGT32Sx2: vex_printf("CmpGT32Sx2"); return; case Iop_ShlN16x4: vex_printf("ShlN16x4"); return; case Iop_ShlN32x2: vex_printf("ShlN32x2"); return; case Iop_ShrN16x4: vex_printf("ShrN16x4"); return; case Iop_ShrN32x2: vex_printf("ShrN32x2"); return; case Iop_SarN16x4: vex_printf("SarN16x4"); return; case Iop_SarN32x2: vex_printf("SarN32x2"); return; case Iop_QNarrow16Ux4: vex_printf("QNarrow16Ux4"); return; case Iop_QNarrow16Sx4: vex_printf("QNarrow16Sx4"); return; case Iop_QNarrow32Sx2: vex_printf("QNarrow32Sx2"); return; case Iop_InterleaveHI8x8: vex_printf("InterleaveHI8x8"); return; case Iop_InterleaveHI16x4: vex_printf("InterleaveHI16x4"); return; case Iop_InterleaveHI32x2: vex_printf("InterleaveHI32x2"); return; case Iop_InterleaveLO8x8: vex_printf("InterleaveLO8x8"); return; case Iop_InterleaveLO16x4: vex_printf("InterleaveLO16x4"); return; case Iop_InterleaveLO32x2: vex_printf("InterleaveLO32x2"); return; case Iop_CmpNEZ32x2: vex_printf("CmpNEZ32x2"); return; case Iop_CmpNEZ16x4: vex_printf("CmpNEZ16x4"); return; case Iop_CmpNEZ8x8: vex_printf("CmpNEZ8x8"); return; case Iop_Add32Fx4: vex_printf("Add32Fx4"); return; case Iop_Add32F0x4: vex_printf("Add32F0x4"); return; case Iop_Add64Fx2: vex_printf("Add64Fx2"); return; case Iop_Add64F0x2: vex_printf("Add64F0x2"); return; case Iop_Div32Fx4: vex_printf("Div32Fx4"); return;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -