///////////////////////////////////////////////////////////////////////////////////////////////// // Move if Zero/Non zero. ///////////////////////////////////////////////////////////////////////////////////////////////// private void _movzn(OpCode OpCode) { var SkipMoveLabel = MipsMethodEmiter.ILGenerator.DefineLabel(); MipsMethodEmiter.LoadGPR_Unsigned(RT); MipsMethodEmiter.ILGenerator.Emit(OpCodes.Ldc_I4_0); MipsMethodEmiter.ILGenerator.Emit(OpCode, SkipMoveLabel); MipsMethodEmiter.SET_REG(RD, RS); MipsMethodEmiter.ILGenerator.MarkLabel(SkipMoveLabel); }
///////////////////////////////////////////////////////////////////////////////////////////////// // MAXimum/MINimum. ///////////////////////////////////////////////////////////////////////////////////////////////// private void _max_min(OpCode BranchOpCode) { var LabelIf = MipsMethodEmiter.ILGenerator.DefineLabel(); var LabelElse = MipsMethodEmiter.ILGenerator.DefineLabel(); var LabelEnd = MipsMethodEmiter.ILGenerator.DefineLabel(); MipsMethodEmiter.LoadGPR_Signed(RS); MipsMethodEmiter.LoadGPR_Signed(RT); MipsMethodEmiter.ILGenerator.Emit(BranchOpCode, LabelElse); // IF MipsMethodEmiter.ILGenerator.MarkLabel(LabelIf); MipsMethodEmiter.SET_REG(RD, RS); MipsMethodEmiter.ILGenerator.Emit(OpCodes.Br, LabelEnd); // ELSE MipsMethodEmiter.ILGenerator.MarkLabel(LabelElse); MipsMethodEmiter.SET_REG(RD, RT); MipsMethodEmiter.ILGenerator.Emit(OpCodes.Br, LabelEnd); // END MipsMethodEmiter.ILGenerator.MarkLabel(LabelEnd); }