Optimized lcmp, fcmpl, fcmpg, dcmpl and dcmpg by Dennis Ushakov.

This commit is contained in:
jfrijters 2007-05-25 05:56:24 +00:00
Родитель 595e22437e
Коммит d5ffe2a830
1 изменённых файлов: 15 добавлений и 65 удалений

Просмотреть файл

@ -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;