@@ -9274,41 +9274,40 @@ void LowererMD::GenerateFastInlineBuiltInCall(IR::Instr* instr, IR::JnHelperMeth
92749274 instr->InsertBefore (branchInstr);
92759275 LowererMDArch::EmitInt4Instr (branchInstr);
92769276 }
9277- // MOV dst, src1
9278- this ->m_lowerer ->InsertMove (dst, src1, instr);
9277+ // MOV dst, src1
9278+ this ->m_lowerer ->InsertMove (dst, src1, instr);
92799279 }
9280-
9281- else if (dst->IsFloat64 ())
9280+ else if (dst->IsFloat ())
92829281 {
9283- // COMISD src1 (src2), src2 (src1)
9282+ // COMISD/COMISS src1 (src2), src2 (src1)
92849283 // JA $doneLabel
92859284 // JEQ $labelNegZeroAndNaNCheckHelper
9286- // MOVSD dst, src2
9285+ // MOVSD/MOVSS dst, src2
92879286 // JMP $doneLabel
92889287 //
92899288 // $labelNegZeroAndNaNCheckHelper
92909289 // JP $labelNaNHelper
92919290 // if(min)
92929291 // {
92939292 // if(src2 == -0.0)
9294- // MOVSD dst, src2
9293+ // MOVSD/MOVSS dst, src2
92959294 // }
92969295 // else
92979296 // {
92989297 // if(src1 == -0.0)
9299- // MOVSD dst, src2
9298+ // MOVSD/MOVSS dst, src2
93009299 // }
93019300 // JMP $doneLabel
93029301 //
93039302 // $labelNaNHelper
9304- // MOVSD dst, NaN
9303+ // MOVSD/MOVSS dst, NaN
93059304 //
93069305 // $doneLabel
93079306
9308- // MOVSD dst, src1;
9307+ // MOVSD/MOVSS dst, src1;
93099308 Assert (!dst->IsEqual (src1));
9310- this ->m_lowerer ->InsertMove (dst, src1, instr);
93119309
9310+ this ->m_lowerer ->InsertMove (dst, src1, instr);
93129311 if (min)
93139312 {
93149313 this ->m_lowerer ->InsertCompareBranch (src1, src2, Js::OpCode::BrLt_A, doneLabel, instr); // Lowering of BrLt_A for floats is done to JA with operands swapped
@@ -9343,7 +9342,17 @@ void LowererMD::GenerateFastInlineBuiltInCall(IR::Instr* instr, IR::JnHelperMeth
93439342 instr->InsertBefore (IR::BranchInstr::New (Js::OpCode::JMP, doneLabel, instr->m_func ));
93449343
93459344 instr->InsertBefore (labelNaNHelper);
9346- IR::Opnd * opndNaN = IR::MemRefOpnd::New ((double *)&(Js::JavascriptNumber::k_Nan), IRType::TyFloat64, this ->m_func );
9345+ IR::Opnd * opndNaN = nullptr ;
9346+
9347+ if (dst->IsFloat32 ())
9348+ {
9349+ opndNaN = IR::MemRefOpnd::New ((float *)&(Js::JavascriptNumber::k_Nan32), IRType::TyFloat32, this ->m_func );
9350+ }
9351+ else
9352+ {
9353+ opndNaN = IR::MemRefOpnd::New ((double *)&(Js::JavascriptNumber::k_Nan), IRType::TyFloat64, this ->m_func );
9354+ }
9355+
93479356 this ->m_lowerer ->InsertMove (dst, opndNaN, instr);
93489357 }
93499358 instr->InsertBefore (doneLabel);
0 commit comments