📄 irdefs.c
字号:
case Iop_InterleaveHI8x8: case Iop_InterleaveLO8x8: case Iop_InterleaveHI16x4: case Iop_InterleaveLO16x4: case Iop_InterleaveHI32x2: case Iop_InterleaveLO32x2: case Iop_Max8Ux8: case Iop_Max16Sx4: case Iop_Min8Ux8: case Iop_Min16Sx4: case Iop_Mul16x4: case Iop_MulHi16Sx4: case Iop_MulHi16Ux4: case Iop_QAdd8Sx8: case Iop_QAdd16Sx4: case Iop_QAdd8Ux8: case Iop_QAdd16Ux4: case Iop_QNarrow32Sx2: case Iop_QNarrow16Sx4: case Iop_QNarrow16Ux4: case Iop_Sub8x8: case Iop_Sub16x4: case Iop_Sub32x2: case Iop_QSub8Sx8: case Iop_QSub16Sx4: case Iop_QSub8Ux8: case Iop_QSub16Ux4: BINARY(Ity_I64,Ity_I64, Ity_I64); case Iop_ShlN32x2: case Iop_ShlN16x4: case Iop_ShrN32x2: case Iop_ShrN16x4: case Iop_SarN32x2: case Iop_SarN16x4: BINARY(Ity_I64,Ity_I8, Ity_I64); case Iop_Shl8: case Iop_Shr8: case Iop_Sar8: BINARY(Ity_I8,Ity_I8, Ity_I8); case Iop_Shl16: case Iop_Shr16: case Iop_Sar16: BINARY(Ity_I16,Ity_I8, Ity_I16); case Iop_Shl32: case Iop_Shr32: case Iop_Sar32: BINARY(Ity_I32,Ity_I8, Ity_I32); case Iop_Shl64: case Iop_Shr64: case Iop_Sar64: BINARY(Ity_I64,Ity_I8, Ity_I64); case Iop_Not8: case Iop_Neg8: UNARY(Ity_I8, Ity_I8); case Iop_Not16: case Iop_Neg16: UNARY(Ity_I16, Ity_I16); case Iop_Not32: case Iop_Neg32: UNARY(Ity_I32, Ity_I32); case Iop_Neg64: case Iop_Not64: case Iop_CmpNEZ32x2: case Iop_CmpNEZ16x4: case Iop_CmpNEZ8x8: UNARY(Ity_I64, Ity_I64); case Iop_CmpEQ8: case Iop_CmpNE8: COMPARISON(Ity_I8); case Iop_CmpEQ16: case Iop_CmpNE16: COMPARISON(Ity_I16); case Iop_CmpEQ32: case Iop_CmpNE32: case Iop_CmpLT32S: case Iop_CmpLE32S: case Iop_CmpLT32U: case Iop_CmpLE32U: COMPARISON(Ity_I32); case Iop_CmpEQ64: case Iop_CmpNE64: case Iop_CmpLT64S: case Iop_CmpLE64S: case Iop_CmpLT64U: case Iop_CmpLE64U: COMPARISON(Ity_I64); case Iop_CmpNEZ8: UNARY_COMPARISON(Ity_I8); case Iop_CmpNEZ16: UNARY_COMPARISON(Ity_I16); case Iop_CmpNEZ32: UNARY_COMPARISON(Ity_I32); case Iop_CmpNEZ64: UNARY_COMPARISON(Ity_I64); case Iop_MullU8: case Iop_MullS8: BINARY(Ity_I8,Ity_I8, Ity_I16); case Iop_MullU16: case Iop_MullS16: BINARY(Ity_I16,Ity_I16, Ity_I32); case Iop_MullU32: case Iop_MullS32: BINARY(Ity_I32,Ity_I32, Ity_I64); case Iop_MullU64: case Iop_MullS64: BINARY(Ity_I64,Ity_I64, Ity_I128); case Iop_Clz32: case Iop_Ctz32: UNARY(Ity_I32, Ity_I32); case Iop_Clz64: case Iop_Ctz64: UNARY(Ity_I64, Ity_I64); case Iop_DivU32: case Iop_DivS32: BINARY(Ity_I32,Ity_I32, Ity_I32); case Iop_DivU64: case Iop_DivS64: BINARY(Ity_I64,Ity_I64, Ity_I64); case Iop_DivModU64to32: case Iop_DivModS64to32: BINARY(Ity_I64,Ity_I32, Ity_I64); case Iop_DivModU128to64: case Iop_DivModS128to64: BINARY(Ity_I128,Ity_I64, Ity_I128); case Iop_16HIto8: case Iop_16to8: UNARY(Ity_I16, Ity_I8); case Iop_8HLto16: BINARY(Ity_I8,Ity_I8, Ity_I16); case Iop_32HIto16: case Iop_32to16: UNARY(Ity_I32, Ity_I16); case Iop_16HLto32: BINARY(Ity_I16,Ity_I16, Ity_I32); case Iop_64HIto32: case Iop_64to32: UNARY(Ity_I64, Ity_I32); case Iop_32HLto64: BINARY(Ity_I32,Ity_I32, Ity_I64); case Iop_128HIto64: case Iop_128to64: UNARY(Ity_I128, Ity_I64); case Iop_64HLto128: BINARY(Ity_I64,Ity_I64, Ity_I128); case Iop_Not1: UNARY(Ity_I1, Ity_I1); case Iop_1Uto8: UNARY(Ity_I1, Ity_I8); case Iop_1Sto8: UNARY(Ity_I1, Ity_I8); case Iop_1Sto16: UNARY(Ity_I1, Ity_I16); case Iop_1Uto32: case Iop_1Sto32: UNARY(Ity_I1, Ity_I32); case Iop_1Sto64: case Iop_1Uto64: UNARY(Ity_I1, Ity_I64); case Iop_32to1: UNARY(Ity_I32, Ity_I1); case Iop_64to1: UNARY(Ity_I64, Ity_I1); case Iop_8Uto32: case Iop_8Sto32: UNARY(Ity_I8, Ity_I32); case Iop_8Uto16: case Iop_8Sto16: UNARY(Ity_I8, Ity_I16); case Iop_16Uto32: case Iop_16Sto32: UNARY(Ity_I16, Ity_I32); case Iop_32Sto64: case Iop_32Uto64: UNARY(Ity_I32, Ity_I64); case Iop_8Uto64: case Iop_8Sto64: UNARY(Ity_I8, Ity_I64); case Iop_16Uto64: case Iop_16Sto64: UNARY(Ity_I16, Ity_I64); case Iop_64to16: UNARY(Ity_I64, Ity_I16); case Iop_32to8: UNARY(Ity_I32, Ity_I8); case Iop_64to8: UNARY(Ity_I64, Ity_I8); case Iop_AddF64: case Iop_SubF64: case Iop_MulF64: case Iop_DivF64: case Iop_AddF64r32: case Iop_SubF64r32: case Iop_MulF64r32: case Iop_DivF64r32: TERNARY(ity_RMode,Ity_F64,Ity_F64, Ity_F64); case Iop_NegF64: case Iop_AbsF64: UNARY(Ity_F64, Ity_F64); case Iop_SqrtF64: case Iop_SqrtF64r32: BINARY(ity_RMode,Ity_F64, Ity_F64); case Iop_CmpF64: BINARY(Ity_F64,Ity_F64, Ity_I32); case Iop_F64toI16: BINARY(ity_RMode,Ity_F64, Ity_I16); case Iop_F64toI32: BINARY(ity_RMode,Ity_F64, Ity_I32); case Iop_F64toI64: BINARY(ity_RMode,Ity_F64, Ity_I64); case Iop_I16toF64: UNARY(Ity_I16, Ity_F64); case Iop_I32toF64: UNARY(Ity_I32, Ity_F64); case Iop_I64toF64: BINARY(ity_RMode,Ity_I64, Ity_F64); case Iop_F32toF64: UNARY(Ity_F32, Ity_F64); case Iop_F64toF32: BINARY(ity_RMode,Ity_F64, Ity_F32); case Iop_ReinterpI64asF64: UNARY(Ity_I64, Ity_F64); case Iop_ReinterpF64asI64: UNARY(Ity_F64, Ity_I64); case Iop_ReinterpI32asF32: UNARY(Ity_I32, Ity_F32); case Iop_AtanF64: case Iop_Yl2xF64: case Iop_Yl2xp1F64: case Iop_ScaleF64: case Iop_PRemF64: case Iop_PRem1F64: TERNARY(ity_RMode,Ity_F64,Ity_F64, Ity_F64); case Iop_PRemC3210F64: case Iop_PRem1C3210F64: TERNARY(ity_RMode,Ity_F64,Ity_F64, Ity_I32); case Iop_SinF64: case Iop_CosF64: case Iop_TanF64: case Iop_2xm1F64: case Iop_RoundF64toInt: BINARY(ity_RMode,Ity_F64, Ity_F64); case Iop_MAddF64: case Iop_MSubF64: case Iop_MAddF64r32: case Iop_MSubF64r32: QUATERNARY(ity_RMode,Ity_F64,Ity_F64,Ity_F64, Ity_F64); case Iop_Est5FRSqrt: UNARY(Ity_F64, Ity_F64); case Iop_RoundF64toF32: BINARY(ity_RMode,Ity_F64, Ity_F64); case Iop_CalcFPRF: UNARY(Ity_F64, Ity_I32); case Iop_TruncF64asF32: UNARY(Ity_F64, Ity_F32); case Iop_I32UtoFx4: case Iop_I32StoFx4: case Iop_QFtoI32Ux4_RZ: case Iop_QFtoI32Sx4_RZ: case Iop_RoundF32x4_RM: case Iop_RoundF32x4_RP: case Iop_RoundF32x4_RN: case Iop_RoundF32x4_RZ: UNARY(Ity_V128, Ity_V128); case Iop_64HLtoV128: BINARY(Ity_I64,Ity_I64, Ity_V128); case Iop_V128to64: case Iop_V128HIto64: UNARY(Ity_V128, Ity_I64); case Iop_V128to32: UNARY(Ity_V128, Ity_I32); case Iop_32UtoV128: UNARY(Ity_I32, Ity_V128); case Iop_64UtoV128: UNARY(Ity_I64, Ity_V128); case Iop_SetV128lo32: BINARY(Ity_V128,Ity_I32, Ity_V128); case Iop_SetV128lo64: BINARY(Ity_V128,Ity_I64, Ity_V128); case Iop_Dup8x16: UNARY(Ity_I8, Ity_V128); case Iop_Dup16x8: UNARY(Ity_I16, Ity_V128); case Iop_Dup32x4: UNARY(Ity_I32, Ity_V128); case Iop_CmpEQ32Fx4: case Iop_CmpLT32Fx4: case Iop_CmpEQ64Fx2: case Iop_CmpLT64Fx2: case Iop_CmpLE32Fx4: case Iop_CmpUN32Fx4: case Iop_CmpLE64Fx2: case Iop_CmpUN64Fx2: case Iop_CmpGT32Fx4: case Iop_CmpGE32Fx4: case Iop_CmpEQ32F0x4: case Iop_CmpLT32F0x4: case Iop_CmpEQ64F0x2: case Iop_CmpLT64F0x2: case Iop_CmpLE32F0x4: case Iop_CmpUN32F0x4: case Iop_CmpLE64F0x2: case Iop_CmpUN64F0x2: case Iop_Add32Fx4: case Iop_Add32F0x4: case Iop_Add64Fx2: case Iop_Add64F0x2: case Iop_Div32Fx4: case Iop_Div32F0x4: case Iop_Div64Fx2: case Iop_Div64F0x2: case Iop_Max32Fx4: case Iop_Max32F0x4: case Iop_Max64Fx2: case Iop_Max64F0x2: case Iop_Min32Fx4: case Iop_Min32F0x4: case Iop_Min64Fx2: case Iop_Min64F0x2: case Iop_Mul32Fx4: case Iop_Mul32F0x4: case Iop_Mul64Fx2: case Iop_Mul64F0x2: case Iop_Sub32Fx4: case Iop_Sub32F0x4: case Iop_Sub64Fx2: case Iop_Sub64F0x2: case Iop_AndV128: case Iop_OrV128: case Iop_XorV128: case Iop_Add8x16: case Iop_Add16x8: case Iop_Add32x4: case Iop_Add64x2: case Iop_QAdd8Ux16: case Iop_QAdd16Ux8: case Iop_QAdd32Ux4: case Iop_QAdd8Sx16: case Iop_QAdd16Sx8: case Iop_QAdd32Sx4: case Iop_Sub8x16: case Iop_Sub16x8: case Iop_Sub32x4: case Iop_Sub64x2: case Iop_QSub8Ux16: case Iop_QSub16Ux8: case Iop_QSub32Ux4: case Iop_QSub8Sx16: case Iop_QSub16Sx8: case Iop_QSub32Sx4: case Iop_Mul16x8: case Iop_MulHi16Ux8: case Iop_MulHi32Ux4: case Iop_MulHi16Sx8: case Iop_MulHi32Sx4: case Iop_MullEven8Ux16: case Iop_MullEven16Ux8: case Iop_MullEven8Sx16: case Iop_MullEven16Sx8: case Iop_Avg8Ux16: case Iop_Avg16Ux8: case Iop_Avg32Ux4: case Iop_Avg8Sx16: case Iop_Avg16Sx8: case Iop_Avg32Sx4: case Iop_Max8Sx16: case Iop_Max16Sx8: case Iop_Max32Sx4: case Iop_Max8Ux16: case Iop_Max16Ux8: case Iop_Max32Ux4: case Iop_Min8Sx16: case Iop_Min16Sx8: case Iop_Min32Sx4: case Iop_Min8Ux16: case Iop_Min16Ux8: case Iop_Min32Ux4: case Iop_CmpEQ8x16: case Iop_CmpEQ16x8: case Iop_CmpEQ32x4: case Iop_CmpGT8Sx16: case Iop_CmpGT16Sx8: case Iop_CmpGT32Sx4: case Iop_CmpGT8Ux16: case Iop_CmpGT16Ux8: case Iop_CmpGT32Ux4: case Iop_Shl8x16: case Iop_Shl16x8: case Iop_Shl32x4: case Iop_Shr8x16: case Iop_Shr16x8: case Iop_Shr32x4: case Iop_Sar8x16: case Iop_Sar16x8: case Iop_Sar32x4: case Iop_Rol8x16: case Iop_Rol16x8: case Iop_Rol32x4: case Iop_QNarrow16Ux8: case Iop_QNarrow32Ux4: case Iop_QNarrow16Sx8: case Iop_QNarrow32Sx4: case Iop_Narrow16x8: case Iop_Narrow32x4: case Iop_InterleaveHI8x16: case Iop_InterleaveHI16x8: case Iop_InterleaveHI32x4: case Iop_InterleaveHI64x2: case Iop_InterleaveLO8x16: case Iop_InterleaveLO16x8: case Iop_InterleaveLO32x4: case Iop_InterleaveLO64x2: case Iop_Perm8x16: BINARY(Ity_V128,Ity_V128, Ity_V128); case Iop_NotV128: case Iop_Recip32Fx4: case Iop_Recip32F0x4: case Iop_Recip64Fx2: case Iop_Recip64F0x2: case Iop_RSqrt32Fx4: case Iop_RSqrt32F0x4: case Iop_RSqrt64Fx2: case Iop_RSqrt64F0x2: case Iop_Sqrt32Fx4: case Iop_Sqrt32F0x4: case Iop_Sqrt64Fx2: case Iop_Sqrt64F0x2: case Iop_CmpNEZ8x16: case Iop_CmpNEZ16x8: case Iop_CmpNEZ32x4: case Iop_CmpNEZ64x2: UNARY(Ity_V128, Ity_V128); case Iop_ShlV128: case Iop_ShrV128: case Iop_ShlN8x16: case Iop_ShlN16x8: case Iop_ShlN32x4: case Iop_ShlN64x2: case Iop_ShrN8x16: case Iop_ShrN16x8: case Iop_ShrN32x4: case Iop_ShrN64x2: case Iop_SarN8x16: case Iop_SarN16x8: case Iop_SarN32x4: BINARY(Ity_V128,Ity_I8, Ity_V128); default: ppIROp(op); vpanic("typeOfPrimop"); }# undef UNARY# undef BINARY# undef TERNARY# undef COMPARISON# undef UNARY_COMPARISON}/*---------------------------------------------------------------*//*--- Helper functions for the IR -- IR Basic Blocks ---*//*---------------------------------------------------------------*/void addStmtToIRBB ( IRBB* bb, IRStmt* st ){ Int i; if (bb->stmts_used == bb->stmts_size) { IRStmt** stmts2 = LibVEX_Alloc(2 * bb->stmts_size * sizeof(IRStmt*)); for (i = 0; i < bb->stmts_size; i++) stmts2[i] = bb->stmts[i]; bb->stmts = stmts2; bb->stmts_size *= 2; } vassert(bb->stmts_used < bb->stmts_size); bb->stmts[bb->stmts_used] = st; bb->stmts_used++;}/*---------------------------------------------------------------*//*--- Helper functions for the IR -- IR Type Environments ---*//*---------------------------------------------------------------*//* Allocate a new IRTemp, given its type. */IRTemp newIRTemp ( IRTypeEnv* env, IRType ty ){ vassert(env); vassert(env->types_used >= 0); vassert(env->types_size >= 0); vassert(env->types_used <= env->types_size); if (env->types_used < env->types_size) { env->types[env->types_used] = ty; return env->types_used++; } else { Int i; Int new_size = env->types_size==0 ? 8 : 2*env->types_size; IRType* new_types = LibVEX_Alloc(new_size * sizeof(IRType)); for (i = 0; i < env->types_used; i++) new_types[i] = env->types[i]; env->types = new_types; env->types_size = new_size; return newIRTemp(env, ty); }}/*---------------------------------------------------------------*//*--- Helper functions for the IR -- finding types of exprs ---*//*---------------------------------------------------------------*/inline IRType typeOfIRTemp ( IRTypeEnv* env, IRTemp
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -