X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Fmini-amd64.c;h=7b3b9be54a4cb66a3201bf44b3503077593a5a25;hb=62e53e733c55c0940eba0ac78b20a10adf5af9b6;hp=2409f6e02006cd85264e08cb66c03c121c60c7d5;hpb=2e86af5c12fefac619c4dd439aef77462e2910c4;p=mono.git diff --git a/mono/mini/mini-amd64.c b/mono/mini/mini-amd64.c index 2409f6e0200..7b3b9be54a4 100644 --- a/mono/mini/mini-amd64.c +++ b/mono/mini/mini-amd64.c @@ -3743,7 +3743,19 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb) case OP_FBGT: case OP_FBGT_UN: if (use_sse2 || (cfg->opt & MONO_OPT_FCMOV)) { - EMIT_COND_BRANCH (ins, X86_CC_LT, FALSE); + if (ins->opcode == OP_FBGT) { + guchar *br1; + + /* skip branch if C1=1 */ + br1 = code; + x86_branch8 (code, X86_CC_P, 0, FALSE); + /* branch if (C0 | C3) = 1 */ + EMIT_COND_BRANCH (ins, X86_CC_LT, FALSE); + amd64_patch (br1, code); + break; + } else { + EMIT_COND_BRANCH (ins, X86_CC_LT, FALSE); + } break; } amd64_alu_reg_imm (code, X86_CMP, AMD64_RAX, X86_FP_C0);