зеркало из https://github.com/mono/ikvm-fork.git
Optimized lcmp, fcmpl, fcmpg, dcmpl and dcmpg by Dennis Ushakov.
This commit is contained in:
Родитель
595e22437e
Коммит
d5ffe2a830
|
@ -2445,21 +2445,11 @@ class Compiler
|
|||
ilGenerator.Emit(OpCodes.Stloc, value1);
|
||||
ilGenerator.Emit(OpCodes.Ldloc, value1);
|
||||
ilGenerator.Emit(OpCodes.Ldloc, value2);
|
||||
Label res1 = ilGenerator.DefineLabel();
|
||||
ilGenerator.Emit(OpCodes.Bgt_S, res1);
|
||||
ilGenerator.Emit(OpCodes.Cgt);
|
||||
ilGenerator.Emit(OpCodes.Ldloc, value1);
|
||||
ilGenerator.Emit(OpCodes.Ldloc, value2);
|
||||
Label res0 = ilGenerator.DefineLabel();
|
||||
ilGenerator.Emit(OpCodes.Beq_S, res0);
|
||||
ilGenerator.Emit(OpCodes.Ldc_I4_M1);
|
||||
Label end = ilGenerator.DefineLabel();
|
||||
ilGenerator.Emit(OpCodes.Br_S, end);
|
||||
ilGenerator.MarkLabel(res1);
|
||||
ilGenerator.Emit(OpCodes.Ldc_I4_1);
|
||||
ilGenerator.Emit(OpCodes.Br_S, end);
|
||||
ilGenerator.MarkLabel(res0);
|
||||
ilGenerator.Emit(OpCodes.Ldc_I4_0);
|
||||
ilGenerator.MarkLabel(end);
|
||||
ilGenerator.Emit(OpCodes.Clt);
|
||||
ilGenerator.Emit(OpCodes.Sub);
|
||||
ReleaseTempLocal(value1);
|
||||
ReleaseTempLocal(value2);
|
||||
break;
|
||||
|
@ -2472,21 +2462,11 @@ class Compiler
|
|||
ilGenerator.Emit(OpCodes.Stloc, value1);
|
||||
ilGenerator.Emit(OpCodes.Ldloc, value1);
|
||||
ilGenerator.Emit(OpCodes.Ldloc, value2);
|
||||
Label res1 = ilGenerator.DefineLabel();
|
||||
ilGenerator.Emit(OpCodes.Bgt_S, res1);
|
||||
ilGenerator.Emit(OpCodes.Cgt);
|
||||
ilGenerator.Emit(OpCodes.Ldloc, value1);
|
||||
ilGenerator.Emit(OpCodes.Ldloc, value2);
|
||||
Label res0 = ilGenerator.DefineLabel();
|
||||
ilGenerator.Emit(OpCodes.Beq_S, res0);
|
||||
ilGenerator.Emit(OpCodes.Ldc_I4_M1);
|
||||
Label end = ilGenerator.DefineLabel();
|
||||
ilGenerator.Emit(OpCodes.Br_S, end);
|
||||
ilGenerator.MarkLabel(res1);
|
||||
ilGenerator.Emit(OpCodes.Ldc_I4_1);
|
||||
ilGenerator.Emit(OpCodes.Br_S, end);
|
||||
ilGenerator.MarkLabel(res0);
|
||||
ilGenerator.Emit(OpCodes.Ldc_I4_0);
|
||||
ilGenerator.MarkLabel(end);
|
||||
ilGenerator.Emit(OpCodes.Clt_Un);
|
||||
ilGenerator.Emit(OpCodes.Sub);
|
||||
ReleaseTempLocal(value1);
|
||||
ReleaseTempLocal(value2);
|
||||
break;
|
||||
|
@ -2499,21 +2479,11 @@ class Compiler
|
|||
ilGenerator.Emit(OpCodes.Stloc, value1);
|
||||
ilGenerator.Emit(OpCodes.Ldloc, value1);
|
||||
ilGenerator.Emit(OpCodes.Ldloc, value2);
|
||||
Label resm1 = ilGenerator.DefineLabel();
|
||||
ilGenerator.Emit(OpCodes.Blt_S, resm1);
|
||||
ilGenerator.Emit(OpCodes.Cgt_Un);
|
||||
ilGenerator.Emit(OpCodes.Ldloc, value1);
|
||||
ilGenerator.Emit(OpCodes.Ldloc, value2);
|
||||
Label res0 = ilGenerator.DefineLabel();
|
||||
ilGenerator.Emit(OpCodes.Beq_S, res0);
|
||||
ilGenerator.Emit(OpCodes.Ldc_I4_1);
|
||||
Label end = ilGenerator.DefineLabel();
|
||||
ilGenerator.Emit(OpCodes.Br_S, end);
|
||||
ilGenerator.MarkLabel(resm1);
|
||||
ilGenerator.Emit(OpCodes.Ldc_I4_M1);
|
||||
ilGenerator.Emit(OpCodes.Br_S, end);
|
||||
ilGenerator.MarkLabel(res0);
|
||||
ilGenerator.Emit(OpCodes.Ldc_I4_0);
|
||||
ilGenerator.MarkLabel(end);
|
||||
ilGenerator.Emit(OpCodes.Clt);
|
||||
ilGenerator.Emit(OpCodes.Sub);
|
||||
ReleaseTempLocal(value1);
|
||||
ReleaseTempLocal(value2);
|
||||
break;
|
||||
|
@ -2526,21 +2496,11 @@ class Compiler
|
|||
ilGenerator.Emit(OpCodes.Stloc, value1);
|
||||
ilGenerator.Emit(OpCodes.Ldloc, value1);
|
||||
ilGenerator.Emit(OpCodes.Ldloc, value2);
|
||||
Label res1 = ilGenerator.DefineLabel();
|
||||
ilGenerator.Emit(OpCodes.Bgt_S, res1);
|
||||
ilGenerator.Emit(OpCodes.Cgt);
|
||||
ilGenerator.Emit(OpCodes.Ldloc, value1);
|
||||
ilGenerator.Emit(OpCodes.Ldloc, value2);
|
||||
Label res0 = ilGenerator.DefineLabel();
|
||||
ilGenerator.Emit(OpCodes.Beq_S, res0);
|
||||
ilGenerator.Emit(OpCodes.Ldc_I4_M1);
|
||||
Label end = ilGenerator.DefineLabel();
|
||||
ilGenerator.Emit(OpCodes.Br_S, end);
|
||||
ilGenerator.MarkLabel(res1);
|
||||
ilGenerator.Emit(OpCodes.Ldc_I4_1);
|
||||
ilGenerator.Emit(OpCodes.Br_S, end);
|
||||
ilGenerator.MarkLabel(res0);
|
||||
ilGenerator.Emit(OpCodes.Ldc_I4_0);
|
||||
ilGenerator.MarkLabel(end);
|
||||
ilGenerator.Emit(OpCodes.Clt_Un);
|
||||
ilGenerator.Emit(OpCodes.Sub);
|
||||
ReleaseTempLocal(value1);
|
||||
ReleaseTempLocal(value2);
|
||||
break;
|
||||
|
@ -2553,21 +2513,11 @@ class Compiler
|
|||
ilGenerator.Emit(OpCodes.Stloc, value1);
|
||||
ilGenerator.Emit(OpCodes.Ldloc, value1);
|
||||
ilGenerator.Emit(OpCodes.Ldloc, value2);
|
||||
Label resm1 = ilGenerator.DefineLabel();
|
||||
ilGenerator.Emit(OpCodes.Blt_S, resm1);
|
||||
ilGenerator.Emit(OpCodes.Cgt_Un);
|
||||
ilGenerator.Emit(OpCodes.Ldloc, value1);
|
||||
ilGenerator.Emit(OpCodes.Ldloc, value2);
|
||||
Label res0 = ilGenerator.DefineLabel();
|
||||
ilGenerator.Emit(OpCodes.Beq_S, res0);
|
||||
ilGenerator.Emit(OpCodes.Ldc_I4_1);
|
||||
Label end = ilGenerator.DefineLabel();
|
||||
ilGenerator.Emit(OpCodes.Br_S, end);
|
||||
ilGenerator.MarkLabel(resm1);
|
||||
ilGenerator.Emit(OpCodes.Ldc_I4_M1);
|
||||
ilGenerator.Emit(OpCodes.Br_S, end);
|
||||
ilGenerator.MarkLabel(res0);
|
||||
ilGenerator.Emit(OpCodes.Ldc_I4_0);
|
||||
ilGenerator.MarkLabel(end);
|
||||
ilGenerator.Emit(OpCodes.Clt);
|
||||
ilGenerator.Emit(OpCodes.Sub);
|
||||
ReleaseTempLocal(value1);
|
||||
ReleaseTempLocal(value2);
|
||||
break;
|
||||
|
|
Загрузка…
Ссылка в новой задаче