示例#1
0
        /////////////////////////////////////////////////////////////////////////////////////////////////
        // 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);
        }
示例#2
0
        /////////////////////////////////////////////////////////////////////////////////////////////////
        // 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);
        }