@@ -246,52 +246,104 @@ void CodeGen::genSSEIntrinsic(GenTreeHWIntrinsic* node)
246246 emit->emitIns_SIMD_R_R_R_I (INS_cmpps, targetReg, op1Reg, op2Reg, 0 , TYP_SIMD16);
247247 break ;
248248
249+ case NI_SSE_CompareEqualScalar:
250+ assert (baseType == TYP_FLOAT);
251+ op2Reg = op2->gtRegNum ;
252+ emit->emitIns_SIMD_R_R_R_I (INS_cmpss, targetReg, op1Reg, op2Reg, 0 , TYP_SIMD16);
253+ break ;
254+
249255 case NI_SSE_CompareGreaterThan:
250256 case NI_SSE_CompareNotLessThanOrEqual:
251257 assert (baseType == TYP_FLOAT);
252258 op2Reg = op2->gtRegNum ;
253259 emit->emitIns_SIMD_R_R_R_I (INS_cmpps, targetReg, op1Reg, op2Reg, 6 , TYP_SIMD16);
254260 break ;
255261
262+ case NI_SSE_CompareGreaterThanScalar:
263+ case NI_SSE_CompareNotLessThanOrEqualScalar:
264+ assert (baseType == TYP_FLOAT);
265+ op2Reg = op2->gtRegNum ;
266+ emit->emitIns_SIMD_R_R_R_I (INS_cmpss, targetReg, op1Reg, op2Reg, 6 , TYP_SIMD16);
267+ break ;
268+
256269 case NI_SSE_CompareGreaterThanOrEqual:
257270 case NI_SSE_CompareNotLessThan:
258271 assert (baseType == TYP_FLOAT);
259272 op2Reg = op2->gtRegNum ;
260273 emit->emitIns_SIMD_R_R_R_I (INS_cmpps, targetReg, op1Reg, op2Reg, 5 , TYP_SIMD16);
261274 break ;
262275
276+ case NI_SSE_CompareGreaterThanOrEqualScalar:
277+ case NI_SSE_CompareNotLessThanScalar:
278+ assert (baseType == TYP_FLOAT);
279+ op2Reg = op2->gtRegNum ;
280+ emit->emitIns_SIMD_R_R_R_I (INS_cmpss, targetReg, op1Reg, op2Reg, 5 , TYP_SIMD16);
281+ break ;
282+
263283 case NI_SSE_CompareLessThan:
264284 case NI_SSE_CompareNotGreaterThanOrEqual:
265285 assert (baseType == TYP_FLOAT);
266286 op2Reg = op2->gtRegNum ;
267287 emit->emitIns_SIMD_R_R_R_I (INS_cmpps, targetReg, op1Reg, op2Reg, 1 , TYP_SIMD16);
268288 break ;
269289
290+ case NI_SSE_CompareLessThanScalar:
291+ case NI_SSE_CompareNotGreaterThanOrEqualScalar:
292+ assert (baseType == TYP_FLOAT);
293+ op2Reg = op2->gtRegNum ;
294+ emit->emitIns_SIMD_R_R_R_I (INS_cmpss, targetReg, op1Reg, op2Reg, 1 , TYP_SIMD16);
295+ break ;
296+
270297 case NI_SSE_CompareLessThanOrEqual:
271298 case NI_SSE_CompareNotGreaterThan:
272299 assert (baseType == TYP_FLOAT);
273300 op2Reg = op2->gtRegNum ;
274301 emit->emitIns_SIMD_R_R_R_I (INS_cmpps, targetReg, op1Reg, op2Reg, 2 , TYP_SIMD16);
275302 break ;
276303
304+ case NI_SSE_CompareLessThanOrEqualScalar:
305+ case NI_SSE_CompareNotGreaterThanScalar:
306+ assert (baseType == TYP_FLOAT);
307+ op2Reg = op2->gtRegNum ;
308+ emit->emitIns_SIMD_R_R_R_I (INS_cmpss, targetReg, op1Reg, op2Reg, 2 , TYP_SIMD16);
309+ break ;
310+
277311 case NI_SSE_CompareNotEqual:
278312 assert (baseType == TYP_FLOAT);
279313 op2Reg = op2->gtRegNum ;
280314 emit->emitIns_SIMD_R_R_R_I (INS_cmpps, targetReg, op1Reg, op2Reg, 4 , TYP_SIMD16);
281315 break ;
282316
317+ case NI_SSE_CompareNotEqualScalar:
318+ assert (baseType == TYP_FLOAT);
319+ op2Reg = op2->gtRegNum ;
320+ emit->emitIns_SIMD_R_R_R_I (INS_cmpss, targetReg, op1Reg, op2Reg, 4 , TYP_SIMD16);
321+ break ;
322+
283323 case NI_SSE_CompareOrdered:
284324 assert (baseType == TYP_FLOAT);
285325 op2Reg = op2->gtRegNum ;
286326 emit->emitIns_SIMD_R_R_R_I (INS_cmpps, targetReg, op1Reg, op2Reg, 7 , TYP_SIMD16);
287327 break ;
288328
329+ case NI_SSE_CompareOrderedScalar:
330+ assert (baseType == TYP_FLOAT);
331+ op2Reg = op2->gtRegNum ;
332+ emit->emitIns_SIMD_R_R_R_I (INS_cmpss, targetReg, op1Reg, op2Reg, 7 , TYP_SIMD16);
333+ break ;
334+
289335 case NI_SSE_CompareUnordered:
290336 assert (baseType == TYP_FLOAT);
291337 op2Reg = op2->gtRegNum ;
292338 emit->emitIns_SIMD_R_R_R_I (INS_cmpps, targetReg, op1Reg, op2Reg, 3 , TYP_SIMD16);
293339 break ;
294340
341+ case NI_SSE_CompareUnorderedScalar:
342+ assert (baseType == TYP_FLOAT);
343+ op2Reg = op2->gtRegNum ;
344+ emit->emitIns_SIMD_R_R_R_I (INS_cmpss, targetReg, op1Reg, op2Reg, 3 , TYP_SIMD16);
345+ break ;
346+
295347 case NI_SSE_Divide:
296348 assert (baseType == TYP_FLOAT);
297349 op2Reg = op2->gtRegNum ;
0 commit comments