| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using ILRuntime.Mono.Cecil;
- using ILRuntime.Mono.Cecil.Cil;
- using ILRuntime.CLR.TypeSystem;
- using ILRuntime.CLR.Method;
- using ILRuntime.Runtime.Intepreter.OpCodes;
- namespace ILRuntime.Runtime.Intepreter.RegisterVM
- {
- partial class Optimizer
- {
- public static bool SupportIntemediateValue(OpCodeREnum op)
- {
- switch (op)
- {
- case OpCodeREnum.Add:
- case OpCodeREnum.Sub:
- case OpCodeREnum.Mul:
- case OpCodeREnum.Div:
- case OpCodeREnum.Rem:
- case OpCodeREnum.Rem_Un:
- case OpCodeREnum.And:
- case OpCodeREnum.Or:
- case OpCodeREnum.Xor:
- case OpCodeREnum.Shl:
- case OpCodeREnum.Shr:
- case OpCodeREnum.Shr_Un:
- case OpCodeREnum.Beq:
- case OpCodeREnum.Beq_S:
- case OpCodeREnum.Bge:
- case OpCodeREnum.Bge_S:
- case OpCodeREnum.Bge_Un:
- case OpCodeREnum.Bge_Un_S:
- case OpCodeREnum.Bgt:
- case OpCodeREnum.Bgt_S:
- case OpCodeREnum.Bgt_Un:
- case OpCodeREnum.Bgt_Un_S:
- case OpCodeREnum.Bne_Un:
- case OpCodeREnum.Bne_Un_S:
- case OpCodeREnum.Ble:
- case OpCodeREnum.Ble_S:
- case OpCodeREnum.Ble_Un:
- case OpCodeREnum.Ble_Un_S:
- case OpCodeREnum.Blt:
- case OpCodeREnum.Blt_S:
- case OpCodeREnum.Blt_Un:
- case OpCodeREnum.Blt_Un_S:
- case OpCodeREnum.Ceq:
- case OpCodeREnum.Cgt:
- case OpCodeREnum.Cgt_Un:
- case OpCodeREnum.Clt:
- case OpCodeREnum.Clt_Un:
- return true;
- default:
- return false;
- }
- }
- public static void ReplaceRegisterWithConstant(ref OpCodeR op, ref OpCodeR constant)
- {
- switch (op.Code)
- {
- case OpCodeREnum.Addi:
- case OpCodeREnum.Subi:
- case OpCodeREnum.Muli:
- case OpCodeREnum.Divi:
- case OpCodeREnum.Remi:
- case OpCodeREnum.Remi_Un:
- case OpCodeREnum.Andi:
- case OpCodeREnum.Ori:
- case OpCodeREnum.Xori:
- case OpCodeREnum.Shli:
- case OpCodeREnum.Shri:
- case OpCodeREnum.Shri_Un:
- case OpCodeREnum.Ceqi:
- case OpCodeREnum.Cgti:
- case OpCodeREnum.Cgti_Un:
- case OpCodeREnum.Clti:
- case OpCodeREnum.Clti_Un:
- op.Register3 = 0;
- break;
- case OpCodeREnum.Beqi:
- case OpCodeREnum.Beq_S:
- case OpCodeREnum.Bgei:
- case OpCodeREnum.Bgei_Un:
- case OpCodeREnum.Bgti:
- case OpCodeREnum.Bgti_Un:
- case OpCodeREnum.Bnei_Un:
- case OpCodeREnum.Blei:
- case OpCodeREnum.Blei_Un:
- case OpCodeREnum.Blti:
- case OpCodeREnum.Blti_Un:
- op.Register2 = 0;
- op.Operand4 = op.Operand;
- break;
- }
- switch (constant.Code)
- {
- case OpCodeREnum.Ldc_I4:
- case OpCodeREnum.Ldc_I4_S:
- op.Operand = constant.Operand;
- break;
- case OpCodeREnum.Ldc_I4_0:
- op.Operand = 0;
- break;
- case OpCodeREnum.Ldc_I4_1:
- op.Operand = 1;
- break;
- case OpCodeREnum.Ldc_I4_2:
- op.Operand = 2;
- break;
- case OpCodeREnum.Ldc_I4_3:
- op.Operand = 3;
- break;
- case OpCodeREnum.Ldc_I4_4:
- op.Operand = 4;
- break;
- case OpCodeREnum.Ldc_I4_5:
- op.Operand = 5;
- break;
- case OpCodeREnum.Ldc_I4_6:
- op.Operand = 6;
- break;
- case OpCodeREnum.Ldc_I4_7:
- op.Operand = 7;
- break;
- case OpCodeREnum.Ldc_I4_8:
- op.Operand = 8;
- break;
- case OpCodeREnum.Ldc_I4_M1:
- op.Operand = -1;
- break;
- case OpCodeREnum.Ldc_I8:
- op.OperandLong = constant.OperandLong;
- break;
- case OpCodeREnum.Ldc_R4:
- op.OperandFloat = constant.OperandFloat;
- break;
- case OpCodeREnum.Ldc_R8:
- op.OperandDouble = constant.OperandDouble;
- break;
- }
- }
- public static OpCodeREnum GetIntemediateValueOpcode(OpCodeREnum op)
- {
- switch (op)
- {
- case OpCodeREnum.Add:
- return OpCodeREnum.Addi;
- case OpCodeREnum.Sub:
- return OpCodeREnum.Subi;
- case OpCodeREnum.Mul:
- return OpCodeREnum.Muli;
- case OpCodeREnum.Div:
- return OpCodeREnum.Divi;
- case OpCodeREnum.Rem:
- return OpCodeREnum.Remi;
- case OpCodeREnum.Rem_Un:
- return OpCodeREnum.Remi_Un;
- case OpCodeREnum.And:
- return OpCodeREnum.Andi;
- case OpCodeREnum.Or:
- return OpCodeREnum.Ori;
- case OpCodeREnum.Xor:
- return OpCodeREnum.Xori;
- case OpCodeREnum.Shl:
- return OpCodeREnum.Shli;
- case OpCodeREnum.Shr:
- return OpCodeREnum.Shri;
- case OpCodeREnum.Shr_Un:
- return OpCodeREnum.Shri_Un;
- case OpCodeREnum.Beq:
- case OpCodeREnum.Beq_S:
- return OpCodeREnum.Beqi;
- case OpCodeREnum.Bge:
- case OpCodeREnum.Bge_S:
- return OpCodeREnum.Bgei;
- case OpCodeREnum.Bge_Un:
- case OpCodeREnum.Bge_Un_S:
- return OpCodeREnum.Bgei_Un;
- case OpCodeREnum.Bgt:
- case OpCodeREnum.Bgt_S:
- return OpCodeREnum.Bgti;
- case OpCodeREnum.Bgt_Un:
- case OpCodeREnum.Bgt_Un_S:
- return OpCodeREnum.Bgti_Un;
- case OpCodeREnum.Bne_Un:
- case OpCodeREnum.Bne_Un_S:
- return OpCodeREnum.Bnei_Un;
- case OpCodeREnum.Ble:
- case OpCodeREnum.Ble_S:
- return OpCodeREnum.Blei;
- case OpCodeREnum.Ble_Un:
- case OpCodeREnum.Ble_Un_S:
- return OpCodeREnum.Blei_Un;
- case OpCodeREnum.Blt:
- case OpCodeREnum.Blt_S:
- return OpCodeREnum.Blti;
- case OpCodeREnum.Blt_Un:
- case OpCodeREnum.Blt_Un_S:
- return OpCodeREnum.Blti_Un;
- case OpCodeREnum.Ceq:
- return OpCodeREnum.Ceqi;
- case OpCodeREnum.Cgt:
- return OpCodeREnum.Cgti;
- case OpCodeREnum.Cgt_Un:
- return OpCodeREnum.Cgti_Un;
- case OpCodeREnum.Clt:
- return OpCodeREnum.Clti;
- case OpCodeREnum.Clt_Un:
- return OpCodeREnum.Clti_Un;
- default:
- throw new NotSupportedException();
- }
- }
- public static bool SupportOperandSwap(OpCodeREnum op)
- {
- switch (op)
- {
- case OpCodeREnum.Add:
- case OpCodeREnum.Mul:
- case OpCodeREnum.And:
- case OpCodeREnum.Or:
- case OpCodeREnum.Xor:
- case OpCodeREnum.Beq:
- case OpCodeREnum.Beq_S:
- case OpCodeREnum.Bne_Un:
- case OpCodeREnum.Bne_Un_S:
- case OpCodeREnum.Ceq:
- return true;
- default:
- return false;
- }
- }
- public static bool HasInverseOpcode(OpCodeREnum op)
- {
- switch (op)
- {
- case OpCodeREnum.Bge:
- case OpCodeREnum.Bge_S:
- case OpCodeREnum.Bge_Un:
- case OpCodeREnum.Bge_Un_S:
- case OpCodeREnum.Bgt:
- case OpCodeREnum.Bgt_S:
- case OpCodeREnum.Bgt_Un:
- case OpCodeREnum.Bgt_Un_S:
- case OpCodeREnum.Ble:
- case OpCodeREnum.Ble_S:
- case OpCodeREnum.Ble_Un:
- case OpCodeREnum.Ble_Un_S:
- case OpCodeREnum.Blt:
- case OpCodeREnum.Blt_S:
- case OpCodeREnum.Blt_Un:
- case OpCodeREnum.Blt_Un_S:
- case OpCodeREnum.Cgt:
- case OpCodeREnum.Cgt_Un:
- case OpCodeREnum.Clt:
- case OpCodeREnum.Clt_Un:
- return true;
- default:
- return false;
- }
- }
- public static OpCodeREnum GetInverseOpcode(OpCodeREnum op)
- {
- switch (op)
- {
- case OpCodeREnum.Bge:
- case OpCodeREnum.Bge_S:
- return OpCodeREnum.Ble;
- case OpCodeREnum.Bge_Un:
- case OpCodeREnum.Bge_Un_S:
- return OpCodeREnum.Ble_Un;
- case OpCodeREnum.Bgt:
- case OpCodeREnum.Bgt_S:
- return OpCodeREnum.Blt;
- case OpCodeREnum.Bgt_Un:
- case OpCodeREnum.Bgt_Un_S:
- return OpCodeREnum.Blt_Un;
- case OpCodeREnum.Ble:
- case OpCodeREnum.Ble_S:
- return OpCodeREnum.Bge;
- case OpCodeREnum.Ble_Un:
- case OpCodeREnum.Ble_Un_S:
- return OpCodeREnum.Bge_Un;
- case OpCodeREnum.Blt:
- case OpCodeREnum.Blt_S:
- return OpCodeREnum.Bgt;
- case OpCodeREnum.Blt_Un:
- case OpCodeREnum.Blt_Un_S:
- return OpCodeREnum.Bgt_Un;
- case OpCodeREnum.Cgt:
- return OpCodeREnum.Clt;
- case OpCodeREnum.Clt:
- return OpCodeREnum.Cgt;
- case OpCodeREnum.Clt_Un:
- return OpCodeREnum.Cgt_Un;
- default:
- throw new NotSupportedException();
- }
- }
- public static bool IsLoadConstant(OpCodeREnum op)
- {
- switch (op)
- {
- case OpCodeREnum.Ldc_I4:
- case OpCodeREnum.Ldc_I4_0:
- case OpCodeREnum.Ldc_I4_1:
- case OpCodeREnum.Ldc_I4_2:
- case OpCodeREnum.Ldc_I4_3:
- case OpCodeREnum.Ldc_I4_4:
- case OpCodeREnum.Ldc_I4_5:
- case OpCodeREnum.Ldc_I4_6:
- case OpCodeREnum.Ldc_I4_7:
- case OpCodeREnum.Ldc_I4_8:
- case OpCodeREnum.Ldc_I4_M1:
- case OpCodeREnum.Ldc_I4_S:
- case OpCodeREnum.Ldc_I8:
- case OpCodeREnum.Ldc_R4:
- case OpCodeREnum.Ldc_R8:
- return true;
- default:
- return false;
- }
- }
- public static bool IsBranching(OpCodeREnum op)
- {
- switch (op)
- {
- case OpCodeREnum.Br_S:
- case OpCodeREnum.Br:
- case OpCodeREnum.Brtrue:
- case OpCodeREnum.Brtrue_S:
- case OpCodeREnum.Brfalse:
- case OpCodeREnum.Brfalse_S:
- case OpCodeREnum.Blt:
- case OpCodeREnum.Blt_S:
- case OpCodeREnum.Blt_Un:
- case OpCodeREnum.Blt_Un_S:
- case OpCodeREnum.Ble:
- case OpCodeREnum.Ble_S:
- case OpCodeREnum.Ble_Un:
- case OpCodeREnum.Ble_Un_S:
- case OpCodeREnum.Bgt:
- case OpCodeREnum.Bgt_S:
- case OpCodeREnum.Bgt_Un:
- case OpCodeREnum.Bgt_Un_S:
- case OpCodeREnum.Bge:
- case OpCodeREnum.Bge_S:
- case OpCodeREnum.Bge_Un:
- case OpCodeREnum.Bge_Un_S:
- case OpCodeREnum.Beq:
- case OpCodeREnum.Beq_S:
- case OpCodeREnum.Bne_Un:
- case OpCodeREnum.Bne_Un_S:
- return true;
- }
- return false;
- }
- public static bool IsIntermediateBranching(OpCodeREnum op)
- {
- switch (op)
- {
- case OpCodeREnum.Beqi:
- case OpCodeREnum.Beq_S:
- case OpCodeREnum.Bgei:
- case OpCodeREnum.Bgei_Un:
- case OpCodeREnum.Bgti:
- case OpCodeREnum.Bgti_Un:
- case OpCodeREnum.Bnei_Un:
- case OpCodeREnum.Blei:
- case OpCodeREnum.Blei_Un:
- case OpCodeREnum.Blti:
- case OpCodeREnum.Blti_Un:
- return true;
- }
- return false;
- }
- public static bool GetOpcodeSourceRegister(ref OpCodeR op, bool hasReturn, out short r1, out short r2, out short r3)
- {
- r1 = -1;
- r2 = -1;
- r3 = -1;
- switch (op.Code)
- {
- case OpCodeREnum.Move:
- case OpCodeREnum.Conv_I:
- case OpCodeREnum.Conv_I1:
- case OpCodeREnum.Conv_I2:
- case OpCodeREnum.Conv_I4:
- case OpCodeREnum.Conv_I8:
- case OpCodeREnum.Conv_Ovf_I:
- case OpCodeREnum.Conv_Ovf_I1:
- case OpCodeREnum.Conv_Ovf_I1_Un:
- case OpCodeREnum.Conv_Ovf_I2:
- case OpCodeREnum.Conv_Ovf_I2_Un:
- case OpCodeREnum.Conv_Ovf_I4:
- case OpCodeREnum.Conv_Ovf_I4_Un:
- case OpCodeREnum.Conv_Ovf_I8:
- case OpCodeREnum.Conv_Ovf_I8_Un:
- case OpCodeREnum.Conv_Ovf_I_Un:
- case OpCodeREnum.Conv_Ovf_U:
- case OpCodeREnum.Conv_Ovf_U1:
- case OpCodeREnum.Conv_Ovf_U1_Un:
- case OpCodeREnum.Conv_Ovf_U2:
- case OpCodeREnum.Conv_Ovf_U2_Un:
- case OpCodeREnum.Conv_Ovf_U4:
- case OpCodeREnum.Conv_Ovf_U4_Un:
- case OpCodeREnum.Conv_Ovf_U8:
- case OpCodeREnum.Conv_Ovf_U8_Un:
- case OpCodeREnum.Conv_Ovf_U_Un:
- case OpCodeREnum.Conv_R4:
- case OpCodeREnum.Conv_R8:
- case OpCodeREnum.Conv_R_Un:
- case OpCodeREnum.Conv_U:
- case OpCodeREnum.Conv_U1:
- case OpCodeREnum.Conv_U2:
- case OpCodeREnum.Conv_U4:
- case OpCodeREnum.Conv_U8:
- case OpCodeREnum.Not:
- case OpCodeREnum.Neg:
- case OpCodeREnum.Box:
- case OpCodeREnum.Unbox:
- case OpCodeREnum.Unbox_Any:
- case OpCodeREnum.Ldind_I:
- case OpCodeREnum.Ldind_I1:
- case OpCodeREnum.Ldind_I2:
- case OpCodeREnum.Ldind_I4:
- case OpCodeREnum.Ldind_I8:
- case OpCodeREnum.Ldind_R4:
- case OpCodeREnum.Ldind_R8:
- case OpCodeREnum.Ldind_U1:
- case OpCodeREnum.Ldind_U2:
- case OpCodeREnum.Ldind_U4:
- case OpCodeREnum.Ldind_Ref:
- case OpCodeREnum.Ldobj:
- case OpCodeREnum.Ldloca:
- case OpCodeREnum.Ldloca_S:
- case OpCodeREnum.Ldarg_S:
- case OpCodeREnum.Ldarga:
- case OpCodeREnum.Ldarga_S:
- case OpCodeREnum.Ldlen:
- case OpCodeREnum.Newarr:
- case OpCodeREnum.Ldfld:
- case OpCodeREnum.Ldflda:
- case OpCodeREnum.Ldvirtftn:
- case OpCodeREnum.Isinst:
- r1 = op.Register2;
- return true;
- case OpCodeREnum.Stind_I:
- case OpCodeREnum.Stind_I1:
- case OpCodeREnum.Stind_I2:
- case OpCodeREnum.Stind_I4:
- case OpCodeREnum.Stind_I8:
- case OpCodeREnum.Stind_R4:
- case OpCodeREnum.Stind_R8:
- case OpCodeREnum.Stind_Ref:
- case OpCodeREnum.Stobj:
- case OpCodeREnum.Stfld:
- r1 = op.Register1;
- r2 = op.Register2;
- return true;
- case OpCodeREnum.Ldc_I4_0:
- case OpCodeREnum.Ldc_I4_1:
- case OpCodeREnum.Ldc_I4_2:
- case OpCodeREnum.Ldc_I4_3:
- case OpCodeREnum.Ldc_I4_4:
- case OpCodeREnum.Ldc_I4_5:
- case OpCodeREnum.Ldc_I4_6:
- case OpCodeREnum.Ldc_I4_7:
- case OpCodeREnum.Ldc_I4_8:
- case OpCodeREnum.Ldc_I4_M1:
- case OpCodeREnum.Ldnull:
- case OpCodeREnum.Ldc_I4:
- case OpCodeREnum.Ldc_I4_S:
- case OpCodeREnum.Ldc_I8:
- case OpCodeREnum.Ldc_R4:
- case OpCodeREnum.Ldc_R8:
- case OpCodeREnum.Ldstr:
- case OpCodeREnum.Ldtoken:
- case OpCodeREnum.Ldftn:
- case OpCodeREnum.Ldsfld:
- case OpCodeREnum.Ldsflda:
- case OpCodeREnum.Constrained:
- return false;
- case OpCodeREnum.Callvirt:
- case OpCodeREnum.Call:
- case OpCodeREnum.Newobj:
- r1 = op.Register2;
- r2 = op.Register3;
- r3 = op.Register4;
- return true;
- case OpCodeREnum.Br_S:
- case OpCodeREnum.Br:
- case OpCodeREnum.Nop:
- case OpCodeREnum.InlineStart:
- case OpCodeREnum.InlineEnd:
- case OpCodeREnum.Castclass:
- case OpCodeREnum.Readonly:
- case OpCodeREnum.Leave:
- case OpCodeREnum.Leave_S:
- case OpCodeREnum.Endfinally:
- case OpCodeREnum.Volatile:
- case OpCodeREnum.Rethrow:
- return false;
- case OpCodeREnum.Brtrue:
- case OpCodeREnum.Brtrue_S:
- case OpCodeREnum.Brfalse:
- case OpCodeREnum.Brfalse_S:
- case OpCodeREnum.Push:
- case OpCodeREnum.Initobj:
- case OpCodeREnum.Throw:
- case OpCodeREnum.Stsfld:
- case OpCodeREnum.Switch:
- case OpCodeREnum.Beqi:
- case OpCodeREnum.Bgei:
- case OpCodeREnum.Bgei_Un:
- case OpCodeREnum.Bgti:
- case OpCodeREnum.Bgti_Un:
- case OpCodeREnum.Bnei_Un:
- case OpCodeREnum.Blei:
- case OpCodeREnum.Blei_Un:
- case OpCodeREnum.Blti:
- case OpCodeREnum.Blti_Un:
- r1 = op.Register1;
- return true;
- case OpCodeREnum.Blt:
- case OpCodeREnum.Blt_S:
- case OpCodeREnum.Blt_Un:
- case OpCodeREnum.Blt_Un_S:
- case OpCodeREnum.Ble:
- case OpCodeREnum.Ble_S:
- case OpCodeREnum.Ble_Un:
- case OpCodeREnum.Ble_Un_S:
- case OpCodeREnum.Bgt:
- case OpCodeREnum.Bgt_S:
- case OpCodeREnum.Bgt_Un:
- case OpCodeREnum.Bgt_Un_S:
- case OpCodeREnum.Bge:
- case OpCodeREnum.Bge_S:
- case OpCodeREnum.Bge_Un:
- case OpCodeREnum.Bge_Un_S:
- case OpCodeREnum.Beq:
- case OpCodeREnum.Beq_S:
- case OpCodeREnum.Bne_Un:
- case OpCodeREnum.Bne_Un_S:
- r1 = op.Register1;
- r2 = op.Register2;
- return true;
- case OpCodeREnum.Add:
- case OpCodeREnum.Add_Ovf:
- case OpCodeREnum.Add_Ovf_Un:
- case OpCodeREnum.Sub:
- case OpCodeREnum.Sub_Ovf:
- case OpCodeREnum.Sub_Ovf_Un:
- case OpCodeREnum.Mul:
- case OpCodeREnum.Mul_Ovf:
- case OpCodeREnum.Mul_Ovf_Un:
- case OpCodeREnum.Div:
- case OpCodeREnum.Div_Un:
- case OpCodeREnum.Rem:
- case OpCodeREnum.Rem_Un:
- case OpCodeREnum.Xor:
- case OpCodeREnum.And:
- case OpCodeREnum.Or:
- case OpCodeREnum.Shl:
- case OpCodeREnum.Shr:
- case OpCodeREnum.Shr_Un:
- case OpCodeREnum.Clt:
- case OpCodeREnum.Clt_Un:
- case OpCodeREnum.Cgt:
- case OpCodeREnum.Cgt_Un:
- case OpCodeREnum.Ceq:
- case OpCodeREnum.Ldelem_I1:
- case OpCodeREnum.Ldelem_U1:
- case OpCodeREnum.Ldelem_I2:
- case OpCodeREnum.Ldelem_U2:
- case OpCodeREnum.Ldelem_I4:
- case OpCodeREnum.Ldelem_U4:
- case OpCodeREnum.Ldelem_I8:
- case OpCodeREnum.Ldelem_R4:
- case OpCodeREnum.Ldelem_R8:
- case OpCodeREnum.Ldelem_Any:
- case OpCodeREnum.Ldelem_Ref:
- case OpCodeREnum.Ldelema:
- r1 = op.Register2;
- r2 = op.Register3;
- return true;
- case OpCodeREnum.Addi:
- case OpCodeREnum.Subi:
- case OpCodeREnum.Muli:
- case OpCodeREnum.Divi:
- case OpCodeREnum.Remi:
- case OpCodeREnum.Remi_Un:
- case OpCodeREnum.Andi:
- case OpCodeREnum.Ori:
- case OpCodeREnum.Xori:
- case OpCodeREnum.Shli:
- case OpCodeREnum.Shri:
- case OpCodeREnum.Shri_Un:
- case OpCodeREnum.Ceqi:
- case OpCodeREnum.Cgti:
- case OpCodeREnum.Cgti_Un:
- case OpCodeREnum.Clti:
- case OpCodeREnum.Clti_Un:
- r1 = op.Register2;
- return true;
- case OpCodeREnum.Stelem_I:
- case OpCodeREnum.Stelem_I1:
- case OpCodeREnum.Stelem_I2:
- case OpCodeREnum.Stelem_I4:
- case OpCodeREnum.Stelem_I8:
- case OpCodeREnum.Stelem_R4:
- case OpCodeREnum.Stelem_R8:
- case OpCodeREnum.Stelem_Ref:
- case OpCodeREnum.Stelem_Any:
- r1 = op.Register1;
- r2 = op.Register2;
- r3 = op.Register3;
- return true;
- case OpCodeREnum.Ret:
- if (hasReturn)
- {
- r1 = op.Register1;
- return true;
- }
- else
- return false;
- default:
- throw new NotImplementedException();
- }
- }
- public static bool GetOpcodeDestRegister(ref OpCodes.OpCodeR op, out short r1)
- {
- r1 = -1;
- switch (op.Code)
- {
- case OpCodes.OpCodeREnum.Move:
- case OpCodeREnum.Conv_I:
- case OpCodeREnum.Conv_I1:
- case OpCodeREnum.Conv_I2:
- case OpCodeREnum.Conv_I4:
- case OpCodeREnum.Conv_I8:
- case OpCodeREnum.Conv_Ovf_I:
- case OpCodeREnum.Conv_Ovf_I1:
- case OpCodeREnum.Conv_Ovf_I1_Un:
- case OpCodeREnum.Conv_Ovf_I2:
- case OpCodeREnum.Conv_Ovf_I2_Un:
- case OpCodeREnum.Conv_Ovf_I4:
- case OpCodeREnum.Conv_Ovf_I4_Un:
- case OpCodeREnum.Conv_Ovf_I8:
- case OpCodeREnum.Conv_Ovf_I8_Un:
- case OpCodeREnum.Conv_Ovf_I_Un:
- case OpCodeREnum.Conv_Ovf_U:
- case OpCodeREnum.Conv_Ovf_U1:
- case OpCodeREnum.Conv_Ovf_U1_Un:
- case OpCodeREnum.Conv_Ovf_U2:
- case OpCodeREnum.Conv_Ovf_U2_Un:
- case OpCodeREnum.Conv_Ovf_U4:
- case OpCodeREnum.Conv_Ovf_U4_Un:
- case OpCodeREnum.Conv_Ovf_U8:
- case OpCodeREnum.Conv_Ovf_U8_Un:
- case OpCodeREnum.Conv_Ovf_U_Un:
- case OpCodeREnum.Conv_R4:
- case OpCodeREnum.Conv_R8:
- case OpCodeREnum.Conv_R_Un:
- case OpCodeREnum.Conv_U:
- case OpCodeREnum.Conv_U1:
- case OpCodeREnum.Conv_U2:
- case OpCodeREnum.Conv_U4:
- case OpCodeREnum.Conv_U8:
- case OpCodeREnum.Not:
- case OpCodeREnum.Neg:
- case OpCodeREnum.Box:
- case OpCodeREnum.Unbox:
- case OpCodeREnum.Unbox_Any:
- case OpCodeREnum.Ldc_I4_0:
- case OpCodeREnum.Ldc_I4_1:
- case OpCodeREnum.Ldc_I4_2:
- case OpCodeREnum.Ldc_I4_3:
- case OpCodeREnum.Ldc_I4_4:
- case OpCodeREnum.Ldc_I4_5:
- case OpCodeREnum.Ldc_I4_6:
- case OpCodeREnum.Ldc_I4_7:
- case OpCodeREnum.Ldc_I4_8:
- case OpCodeREnum.Ldc_I4_M1:
- case OpCodeREnum.Ldnull:
- case OpCodeREnum.Ldc_I4:
- case OpCodeREnum.Ldc_I4_S:
- case OpCodeREnum.Ldc_I8:
- case OpCodeREnum.Ldc_R4:
- case OpCodeREnum.Ldc_R8:
- case OpCodeREnum.Ldstr:
- case OpCodeREnum.Callvirt:
- case OpCodeREnum.Call:
- case OpCodeREnum.Newobj:
- case OpCodeREnum.Ldind_I:
- case OpCodeREnum.Ldind_I1:
- case OpCodeREnum.Ldind_I2:
- case OpCodeREnum.Ldind_I4:
- case OpCodeREnum.Ldind_I8:
- case OpCodeREnum.Ldind_R4:
- case OpCodeREnum.Ldind_R8:
- case OpCodeREnum.Ldind_U1:
- case OpCodeREnum.Ldind_U2:
- case OpCodeREnum.Ldind_U4:
- case OpCodeREnum.Ldind_Ref:
- case OpCodeREnum.Ldobj:
- case OpCodeREnum.Ldloca:
- case OpCodeREnum.Ldloca_S:
- case OpCodeREnum.Ldarg_S:
- case OpCodeREnum.Ldarga:
- case OpCodeREnum.Ldarga_S:
- case OpCodeREnum.Ldlen:
- case OpCodeREnum.Newarr:
- case OpCodeREnum.Ldfld:
- case OpCodeREnum.Ldflda:
- case OpCodeREnum.Ldtoken:
- case OpCodeREnum.Isinst:
- case OpCodeREnum.Ldsfld:
- case OpCodeREnum.Ldsflda:
- case OpCodeREnum.Ldftn:
- case OpCodeREnum.Ldvirtftn:
- case OpCodeREnum.Ldelem_I1:
- case OpCodeREnum.Ldelem_U1:
- case OpCodeREnum.Ldelem_I2:
- case OpCodeREnum.Ldelem_U2:
- case OpCodeREnum.Ldelem_I4:
- case OpCodeREnum.Ldelem_U4:
- case OpCodeREnum.Ldelem_I8:
- case OpCodeREnum.Ldelem_R4:
- case OpCodeREnum.Ldelem_R8:
- case OpCodeREnum.Ldelem_Any:
- case OpCodeREnum.Ldelem_Ref:
- case OpCodeREnum.Ldelema:
- r1 = op.Register1;
- return true;
- case OpCodeREnum.Br_S:
- case OpCodeREnum.Br:
- case OpCodeREnum.Brtrue:
- case OpCodeREnum.Brtrue_S:
- case OpCodeREnum.Brfalse:
- case OpCodeREnum.Brfalse_S:
- case OpCodeREnum.Switch:
- case OpCodeREnum.Blt:
- case OpCodeREnum.Blt_S:
- case OpCodeREnum.Blt_Un:
- case OpCodeREnum.Blt_Un_S:
- case OpCodeREnum.Ble:
- case OpCodeREnum.Ble_S:
- case OpCodeREnum.Ble_Un:
- case OpCodeREnum.Ble_Un_S:
- case OpCodeREnum.Bgt:
- case OpCodeREnum.Bgt_S:
- case OpCodeREnum.Bgt_Un:
- case OpCodeREnum.Bgt_Un_S:
- case OpCodeREnum.Bge:
- case OpCodeREnum.Bge_S:
- case OpCodeREnum.Bge_Un:
- case OpCodeREnum.Bge_Un_S:
- case OpCodeREnum.Beq:
- case OpCodeREnum.Beq_S:
- case OpCodeREnum.Bne_Un:
- case OpCodeREnum.Bne_Un_S:
- case OpCodeREnum.Nop:
- case OpCodeREnum.Constrained:
- case OpCodeREnum.Ret:
- case OpCodeREnum.Push:
- case OpCodeREnum.Initobj:
- case OpCodeREnum.InlineStart:
- case OpCodeREnum.InlineEnd:
- case OpCodeREnum.Stind_I:
- case OpCodeREnum.Stind_I1:
- case OpCodeREnum.Stind_I2:
- case OpCodeREnum.Stind_I4:
- case OpCodeREnum.Stind_I8:
- case OpCodeREnum.Stind_R4:
- case OpCodeREnum.Stind_R8:
- case OpCodeREnum.Stind_Ref:
- case OpCodeREnum.Stobj:
- case OpCodeREnum.Stelem_I:
- case OpCodeREnum.Stelem_I1:
- case OpCodeREnum.Stelem_I2:
- case OpCodeREnum.Stelem_I4:
- case OpCodeREnum.Stelem_I8:
- case OpCodeREnum.Stelem_R4:
- case OpCodeREnum.Stelem_R8:
- case OpCodeREnum.Stelem_Ref:
- case OpCodeREnum.Stelem_Any:
- case OpCodeREnum.Stfld:
- case OpCodeREnum.Stsfld:
- case OpCodeREnum.Throw:
- case OpCodeREnum.Castclass:
- case OpCodeREnum.Readonly:
- case OpCodeREnum.Leave:
- case OpCodeREnum.Leave_S:
- case OpCodeREnum.Endfinally:
- case OpCodeREnum.Volatile:
- case OpCodeREnum.Rethrow:
- case OpCodeREnum.Beqi:
- case OpCodeREnum.Bgei:
- case OpCodeREnum.Bgei_Un:
- case OpCodeREnum.Bgti:
- case OpCodeREnum.Bgti_Un:
- case OpCodeREnum.Bnei_Un:
- case OpCodeREnum.Blei:
- case OpCodeREnum.Blei_Un:
- case OpCodeREnum.Blti:
- case OpCodeREnum.Blti_Un:
- return false;
- case OpCodeREnum.Add:
- case OpCodeREnum.Add_Ovf:
- case OpCodeREnum.Add_Ovf_Un:
- case OpCodeREnum.Sub:
- case OpCodeREnum.Sub_Ovf:
- case OpCodeREnum.Sub_Ovf_Un:
- case OpCodeREnum.Mul:
- case OpCodeREnum.Mul_Ovf:
- case OpCodeREnum.Mul_Ovf_Un:
- case OpCodeREnum.Div:
- case OpCodeREnum.Div_Un:
- case OpCodeREnum.Rem:
- case OpCodeREnum.Rem_Un:
- case OpCodeREnum.Xor:
- case OpCodeREnum.And:
- case OpCodeREnum.Or:
- case OpCodeREnum.Shl:
- case OpCodeREnum.Shr:
- case OpCodeREnum.Shr_Un:
- case OpCodeREnum.Clt:
- case OpCodeREnum.Clt_Un:
- case OpCodeREnum.Cgt:
- case OpCodeREnum.Cgt_Un:
- case OpCodeREnum.Ceq:
- case OpCodeREnum.Addi:
- case OpCodeREnum.Subi:
- case OpCodeREnum.Muli:
- case OpCodeREnum.Divi:
- case OpCodeREnum.Remi:
- case OpCodeREnum.Remi_Un:
- case OpCodeREnum.Andi:
- case OpCodeREnum.Ori:
- case OpCodeREnum.Xori:
- case OpCodeREnum.Shli:
- case OpCodeREnum.Shri:
- case OpCodeREnum.Shri_Un:
- case OpCodeREnum.Ceqi:
- case OpCodeREnum.Cgti:
- case OpCodeREnum.Cgti_Un:
- case OpCodeREnum.Clti:
- case OpCodeREnum.Clti_Un:
- r1 = op.Register1;
- return true;
- default:
- throw new NotImplementedException();
- }
- }
- static void ReplaceOpcodeSource(ref OpCodes.OpCodeR op, int idx, short src)
- {
- switch (op.Code)
- {
- case OpCodes.OpCodeREnum.Move:
- case OpCodeREnum.Conv_I:
- case OpCodeREnum.Conv_I1:
- case OpCodeREnum.Conv_I2:
- case OpCodeREnum.Conv_I4:
- case OpCodeREnum.Conv_I8:
- case OpCodeREnum.Conv_Ovf_I:
- case OpCodeREnum.Conv_Ovf_I1:
- case OpCodeREnum.Conv_Ovf_I1_Un:
- case OpCodeREnum.Conv_Ovf_I2:
- case OpCodeREnum.Conv_Ovf_I2_Un:
- case OpCodeREnum.Conv_Ovf_I4:
- case OpCodeREnum.Conv_Ovf_I4_Un:
- case OpCodeREnum.Conv_Ovf_I8:
- case OpCodeREnum.Conv_Ovf_I8_Un:
- case OpCodeREnum.Conv_Ovf_I_Un:
- case OpCodeREnum.Conv_Ovf_U:
- case OpCodeREnum.Conv_Ovf_U1:
- case OpCodeREnum.Conv_Ovf_U1_Un:
- case OpCodeREnum.Conv_Ovf_U2:
- case OpCodeREnum.Conv_Ovf_U2_Un:
- case OpCodeREnum.Conv_Ovf_U4:
- case OpCodeREnum.Conv_Ovf_U4_Un:
- case OpCodeREnum.Conv_Ovf_U8:
- case OpCodeREnum.Conv_Ovf_U8_Un:
- case OpCodeREnum.Conv_Ovf_U_Un:
- case OpCodeREnum.Conv_R4:
- case OpCodeREnum.Conv_R8:
- case OpCodeREnum.Conv_R_Un:
- case OpCodeREnum.Conv_U:
- case OpCodeREnum.Conv_U1:
- case OpCodeREnum.Conv_U2:
- case OpCodeREnum.Conv_U4:
- case OpCodeREnum.Conv_U8:
- case OpCodeREnum.Not:
- case OpCodeREnum.Neg:
- case OpCodeREnum.Box:
- case OpCodeREnum.Unbox:
- case OpCodeREnum.Unbox_Any:
- case OpCodeREnum.Ldind_I:
- case OpCodeREnum.Ldind_I1:
- case OpCodeREnum.Ldind_I2:
- case OpCodeREnum.Ldind_I4:
- case OpCodeREnum.Ldind_I8:
- case OpCodeREnum.Ldind_R4:
- case OpCodeREnum.Ldind_R8:
- case OpCodeREnum.Ldind_U1:
- case OpCodeREnum.Ldind_U2:
- case OpCodeREnum.Ldind_U4:
- case OpCodeREnum.Ldind_Ref:
- case OpCodeREnum.Ldobj:
- case OpCodeREnum.Ldloca:
- case OpCodeREnum.Ldloca_S:
- case OpCodeREnum.Ldarg_S:
- case OpCodeREnum.Ldarga:
- case OpCodeREnum.Ldarga_S:
- case OpCodeREnum.Ldlen:
- case OpCodeREnum.Newarr:
- case OpCodeREnum.Ldfld:
- case OpCodeREnum.Ldflda:
- case OpCodeREnum.Ldvirtftn:
- case OpCodeREnum.Isinst:
- case OpCodeREnum.Addi:
- case OpCodeREnum.Subi:
- case OpCodeREnum.Muli:
- case OpCodeREnum.Divi:
- case OpCodeREnum.Remi:
- case OpCodeREnum.Remi_Un:
- case OpCodeREnum.Andi:
- case OpCodeREnum.Ori:
- case OpCodeREnum.Xori:
- case OpCodeREnum.Shli:
- case OpCodeREnum.Shri:
- case OpCodeREnum.Shri_Un:
- case OpCodeREnum.Ceqi:
- case OpCodeREnum.Cgti:
- case OpCodeREnum.Cgti_Un:
- case OpCodeREnum.Clti:
- case OpCodeREnum.Clti_Un:
- op.Register2 = src;
- break;
- case OpCodeREnum.Stind_I:
- case OpCodeREnum.Stind_I1:
- case OpCodeREnum.Stind_I2:
- case OpCodeREnum.Stind_I4:
- case OpCodeREnum.Stind_I8:
- case OpCodeREnum.Stind_R4:
- case OpCodeREnum.Stind_R8:
- case OpCodeREnum.Stind_Ref:
- case OpCodeREnum.Stobj:
- case OpCodeREnum.Stfld:
- switch (idx)
- {
- case 0:
- op.Register1 = src;
- break;
- case 1:
- op.Register2 = src;
- break;
- default:
- throw new NotSupportedException();
- }
- break;
- case OpCodeREnum.Add:
- case OpCodeREnum.Add_Ovf:
- case OpCodeREnum.Add_Ovf_Un:
- case OpCodeREnum.Sub:
- case OpCodeREnum.Sub_Ovf:
- case OpCodeREnum.Sub_Ovf_Un:
- case OpCodeREnum.Mul:
- case OpCodeREnum.Mul_Ovf:
- case OpCodeREnum.Mul_Ovf_Un:
- case OpCodeREnum.Div:
- case OpCodeREnum.Div_Un:
- case OpCodeREnum.Rem:
- case OpCodeREnum.Rem_Un:
- case OpCodeREnum.Xor:
- case OpCodeREnum.And:
- case OpCodeREnum.Or:
- case OpCodeREnum.Shl:
- case OpCodeREnum.Shr:
- case OpCodeREnum.Shr_Un:
- case OpCodeREnum.Clt:
- case OpCodeREnum.Clt_Un:
- case OpCodeREnum.Cgt:
- case OpCodeREnum.Cgt_Un:
- case OpCodeREnum.Ceq:
- case OpCodeREnum.Ldelem_I1:
- case OpCodeREnum.Ldelem_U1:
- case OpCodeREnum.Ldelem_I2:
- case OpCodeREnum.Ldelem_U2:
- case OpCodeREnum.Ldelem_I4:
- case OpCodeREnum.Ldelem_U4:
- case OpCodeREnum.Ldelem_I8:
- case OpCodeREnum.Ldelem_R4:
- case OpCodeREnum.Ldelem_R8:
- case OpCodeREnum.Ldelem_Any:
- case OpCodeREnum.Ldelem_Ref:
- case OpCodeREnum.Ldelema:
- switch (idx)
- {
- case 0:
- op.Register2 = src;
- break;
- case 1:
- op.Register3 = src;
- break;
- default:
- throw new NotSupportedException();
- }
- break;
- case OpCodeREnum.Stelem_I:
- case OpCodeREnum.Stelem_I1:
- case OpCodeREnum.Stelem_I2:
- case OpCodeREnum.Stelem_I4:
- case OpCodeREnum.Stelem_I8:
- case OpCodeREnum.Stelem_R4:
- case OpCodeREnum.Stelem_R8:
- case OpCodeREnum.Stelem_Ref:
- case OpCodeREnum.Stelem_Any:
- switch (idx)
- {
- case 0:
- op.Register1 = src;
- break;
- case 1:
- op.Register2 = src;
- break;
- case 2:
- op.Register3 = src;
- break;
- default:
- throw new NotSupportedException();
- }
- break;
- case OpCodeREnum.Call:
- case OpCodeREnum.Callvirt:
- case OpCodeREnum.Newobj:
- switch (idx)
- {
- case 0:
- op.Register2 = src;
- break;
- case 1:
- op.Register3 = src;
- break;
- case 2:
- op.Register4 = src;
- break;
- default:
- throw new NotSupportedException();
- }
- break;
- case OpCodeREnum.Brtrue:
- case OpCodeREnum.Brtrue_S:
- case OpCodeREnum.Brfalse:
- case OpCodeREnum.Brfalse_S:
- case OpCodeREnum.Switch:
- case OpCodeREnum.Push:
- case OpCodeREnum.Throw:
- case OpCodeREnum.Stsfld:
- case OpCodeREnum.Initobj:
- case OpCodeREnum.Beqi:
- case OpCodeREnum.Bgei:
- case OpCodeREnum.Bgei_Un:
- case OpCodeREnum.Bgti:
- case OpCodeREnum.Bgti_Un:
- case OpCodeREnum.Bnei_Un:
- case OpCodeREnum.Blei:
- case OpCodeREnum.Blei_Un:
- case OpCodeREnum.Blti:
- case OpCodeREnum.Blti_Un:
- op.Register1 = src;
- break;
- case OpCodeREnum.Blt:
- case OpCodeREnum.Blt_S:
- case OpCodeREnum.Blt_Un:
- case OpCodeREnum.Blt_Un_S:
- case OpCodeREnum.Ble:
- case OpCodeREnum.Ble_S:
- case OpCodeREnum.Ble_Un:
- case OpCodeREnum.Ble_Un_S:
- case OpCodeREnum.Bgt:
- case OpCodeREnum.Bgt_S:
- case OpCodeREnum.Bgt_Un:
- case OpCodeREnum.Bgt_Un_S:
- case OpCodeREnum.Bge:
- case OpCodeREnum.Bge_S:
- case OpCodeREnum.Bge_Un:
- case OpCodeREnum.Bge_Un_S:
- case OpCodeREnum.Beq:
- case OpCodeREnum.Beq_S:
- case OpCodeREnum.Bne_Un:
- case OpCodeREnum.Bne_Un_S:
- switch (idx)
- {
- case 0:
- op.Register1 = src;
- break;
- case 1:
- op.Register2 = src;
- break;
- default:
- throw new NotSupportedException();
- }
- break;
- case OpCodeREnum.Ret:
- op.Register1 = src;
- break;
- default:
- throw new NotImplementedException();
- }
- }
- static void ReplaceOpcodeDest(ref OpCodes.OpCodeR op, short dst)
- {
- switch (op.Code)
- {
- case OpCodes.OpCodeREnum.Move:
- case OpCodeREnum.Ldc_I4_0:
- case OpCodeREnum.Ldc_I4_1:
- case OpCodeREnum.Ldc_I4_2:
- case OpCodeREnum.Ldc_I4_3:
- case OpCodeREnum.Ldc_I4_4:
- case OpCodeREnum.Ldc_I4_5:
- case OpCodeREnum.Ldc_I4_6:
- case OpCodeREnum.Ldc_I4_7:
- case OpCodeREnum.Ldc_I4_8:
- case OpCodeREnum.Ldc_I4_M1:
- case OpCodeREnum.Ldnull:
- case OpCodeREnum.Ldc_I4:
- case OpCodeREnum.Ldc_I4_S:
- case OpCodeREnum.Ldc_I8:
- case OpCodeREnum.Ldc_R4:
- case OpCodeREnum.Ldc_R8:
- case OpCodeREnum.Ldstr:
- case OpCodeREnum.Add:
- case OpCodeREnum.Add_Ovf:
- case OpCodeREnum.Add_Ovf_Un:
- case OpCodeREnum.Sub:
- case OpCodeREnum.Sub_Ovf:
- case OpCodeREnum.Sub_Ovf_Un:
- case OpCodeREnum.Mul:
- case OpCodeREnum.Mul_Ovf:
- case OpCodeREnum.Mul_Ovf_Un:
- case OpCodeREnum.Div:
- case OpCodeREnum.Div_Un:
- case OpCodeREnum.Rem:
- case OpCodeREnum.Rem_Un:
- case OpCodeREnum.Xor:
- case OpCodeREnum.And:
- case OpCodeREnum.Or:
- case OpCodeREnum.Shl:
- case OpCodeREnum.Shr:
- case OpCodeREnum.Shr_Un:
- case OpCodeREnum.Clt:
- case OpCodeREnum.Clt_Un:
- case OpCodeREnum.Cgt:
- case OpCodeREnum.Cgt_Un:
- case OpCodeREnum.Ceq:
- case OpCodeREnum.Conv_I:
- case OpCodeREnum.Conv_I1:
- case OpCodeREnum.Conv_I2:
- case OpCodeREnum.Conv_I4:
- case OpCodeREnum.Conv_I8:
- case OpCodeREnum.Conv_Ovf_I:
- case OpCodeREnum.Conv_Ovf_I1:
- case OpCodeREnum.Conv_Ovf_I1_Un:
- case OpCodeREnum.Conv_Ovf_I2:
- case OpCodeREnum.Conv_Ovf_I2_Un:
- case OpCodeREnum.Conv_Ovf_I4:
- case OpCodeREnum.Conv_Ovf_I4_Un:
- case OpCodeREnum.Conv_Ovf_I8:
- case OpCodeREnum.Conv_Ovf_I8_Un:
- case OpCodeREnum.Conv_Ovf_I_Un:
- case OpCodeREnum.Conv_Ovf_U:
- case OpCodeREnum.Conv_Ovf_U1:
- case OpCodeREnum.Conv_Ovf_U1_Un:
- case OpCodeREnum.Conv_Ovf_U2:
- case OpCodeREnum.Conv_Ovf_U2_Un:
- case OpCodeREnum.Conv_Ovf_U4:
- case OpCodeREnum.Conv_Ovf_U4_Un:
- case OpCodeREnum.Conv_Ovf_U8:
- case OpCodeREnum.Conv_Ovf_U8_Un:
- case OpCodeREnum.Conv_Ovf_U_Un:
- case OpCodeREnum.Conv_R4:
- case OpCodeREnum.Conv_R8:
- case OpCodeREnum.Conv_R_Un:
- case OpCodeREnum.Conv_U:
- case OpCodeREnum.Conv_U1:
- case OpCodeREnum.Conv_U2:
- case OpCodeREnum.Conv_U4:
- case OpCodeREnum.Conv_U8:
- case OpCodeREnum.Not:
- case OpCodeREnum.Neg:
- case OpCodeREnum.Box:
- case OpCodeREnum.Unbox:
- case OpCodeREnum.Unbox_Any:
- case OpCodeREnum.Call:
- case OpCodeREnum.Callvirt:
- case OpCodeREnum.Newobj:
- case OpCodeREnum.Ldind_I:
- case OpCodeREnum.Ldind_I1:
- case OpCodeREnum.Ldind_I2:
- case OpCodeREnum.Ldind_I4:
- case OpCodeREnum.Ldind_I8:
- case OpCodeREnum.Ldind_R4:
- case OpCodeREnum.Ldind_R8:
- case OpCodeREnum.Ldind_U1:
- case OpCodeREnum.Ldind_U2:
- case OpCodeREnum.Ldind_U4:
- case OpCodeREnum.Ldind_Ref:
- case OpCodeREnum.Ldobj:
- case OpCodeREnum.Ldloca:
- case OpCodeREnum.Ldloca_S:
- case OpCodeREnum.Ldarg_S:
- case OpCodeREnum.Ldarga:
- case OpCodeREnum.Ldarga_S:
- case OpCodeREnum.Ldlen:
- case OpCodeREnum.Newarr:
- case OpCodeREnum.Ldfld:
- case OpCodeREnum.Ldflda:
- case OpCodeREnum.Ldsfld:
- case OpCodeREnum.Ldsflda:
- case OpCodeREnum.Ldtoken:
- case OpCodeREnum.Ldftn:
- case OpCodeREnum.Ldvirtftn:
- case OpCodeREnum.Isinst:
- case OpCodeREnum.Ldelem_I1:
- case OpCodeREnum.Ldelem_U1:
- case OpCodeREnum.Ldelem_I2:
- case OpCodeREnum.Ldelem_U2:
- case OpCodeREnum.Ldelem_I4:
- case OpCodeREnum.Ldelem_U4:
- case OpCodeREnum.Ldelem_I8:
- case OpCodeREnum.Ldelem_R4:
- case OpCodeREnum.Ldelem_R8:
- case OpCodeREnum.Ldelem_Any:
- case OpCodeREnum.Ldelem_Ref:
- case OpCodeREnum.Ldelema:
- case OpCodeREnum.Addi:
- case OpCodeREnum.Subi:
- case OpCodeREnum.Muli:
- case OpCodeREnum.Divi:
- case OpCodeREnum.Remi:
- case OpCodeREnum.Remi_Un:
- case OpCodeREnum.Andi:
- case OpCodeREnum.Ori:
- case OpCodeREnum.Xori:
- case OpCodeREnum.Shli:
- case OpCodeREnum.Shri:
- case OpCodeREnum.Shri_Un:
- case OpCodeREnum.Ceqi:
- case OpCodeREnum.Cgti:
- case OpCodeREnum.Cgti_Un:
- case OpCodeREnum.Clti:
- case OpCodeREnum.Clti_Un:
- op.Register1 = dst;
- break;
- case OpCodeREnum.Br_S:
- case OpCodeREnum.Br:
- case OpCodeREnum.Brtrue:
- case OpCodeREnum.Brtrue_S:
- case OpCodeREnum.Brfalse:
- case OpCodeREnum.Brfalse_S:
- case OpCodeREnum.Switch:
- case OpCodeREnum.Blt:
- case OpCodeREnum.Blt_S:
- case OpCodeREnum.Blt_Un:
- case OpCodeREnum.Blt_Un_S:
- case OpCodeREnum.Ble:
- case OpCodeREnum.Ble_S:
- case OpCodeREnum.Ble_Un:
- case OpCodeREnum.Ble_Un_S:
- case OpCodeREnum.Bgt:
- case OpCodeREnum.Bgt_S:
- case OpCodeREnum.Bgt_Un:
- case OpCodeREnum.Bgt_Un_S:
- case OpCodeREnum.Bge:
- case OpCodeREnum.Bge_S:
- case OpCodeREnum.Bge_Un:
- case OpCodeREnum.Bge_Un_S:
- case OpCodeREnum.Beq:
- case OpCodeREnum.Beq_S:
- case OpCodeREnum.Bne_Un:
- case OpCodeREnum.Bne_Un_S:
- case OpCodeREnum.Nop:
- case OpCodeREnum.Ret:
- case OpCodeREnum.Push:
- case OpCodeREnum.Constrained:
- break;
- default:
- throw new NotImplementedException();
- }
- }
- }
- }
|