Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.

Commit 3fcdaf8

Browse files
committed
Adding support for the SSE Reciprocal, ReciprocalSqrt, and Sqrt scalar intrinsics
1 parent cd60a85 commit 3fcdaf8

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

src/jit/hwintrinsiccodegenxarch.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -422,12 +422,24 @@ void CodeGen::genSSEIntrinsic(GenTreeHWIntrinsic* node)
422422
emit->emitIns_SIMD_R_R(INS_rcpps, targetReg, op1Reg, TYP_SIMD16);
423423
break;
424424

425+
case NI_SSE_ReciprocalScalar:
426+
assert(baseType == TYP_FLOAT);
427+
assert(op2 == nullptr);
428+
emit->emitIns_SIMD_R_R_R(INS_rcpss, targetReg, op1Reg, op1Reg, TYP_SIMD16);
429+
break;
430+
425431
case NI_SSE_ReciprocalSqrt:
426432
assert(baseType == TYP_FLOAT);
427433
assert(op2 == nullptr);
428434
emit->emitIns_SIMD_R_R(INS_rsqrtps, targetReg, op1Reg, TYP_SIMD16);
429435
break;
430436

437+
case NI_SSE_ReciprocalSqrtScalar:
438+
assert(baseType == TYP_FLOAT);
439+
assert(op2 == nullptr);
440+
emit->emitIns_SIMD_R_R_R(INS_rsqrtss, targetReg, op1Reg, op1Reg, TYP_SIMD16);
441+
break;
442+
431443
case NI_SSE_SetAllVector128:
432444
assert(baseType == TYP_FLOAT);
433445
assert(op2 == nullptr);
@@ -536,6 +548,12 @@ void CodeGen::genSSEIntrinsic(GenTreeHWIntrinsic* node)
536548
emit->emitIns_SIMD_R_R(INS_sqrtps, targetReg, op1Reg, TYP_SIMD16);
537549
break;
538550

551+
case NI_SSE_SqrtScalar:
552+
assert(baseType == TYP_FLOAT);
553+
assert(op2 == nullptr);
554+
emit->emitIns_SIMD_R_R_R(INS_sqrtss, targetReg, op1Reg, op1Reg, TYP_SIMD16);
555+
break;
556+
539557
case NI_SSE_StaticCast:
540558
assert(op2 == nullptr);
541559
if (op1Reg != targetReg)

src/jit/hwintrinsicxarch.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -598,8 +598,11 @@ GenTree* Compiler::impSSEIntrinsic(NamedIntrinsic intrinsic,
598598
break;
599599

600600
case NI_SSE_Reciprocal:
601+
case NI_SSE_ReciprocalScalar:
601602
case NI_SSE_ReciprocalSqrt:
603+
case NI_SSE_ReciprocalSqrtScalar:
602604
case NI_SSE_Sqrt:
605+
case NI_SSE_SqrtScalar:
603606
assert(sig->numArgs == 1);
604607
assert(getBaseTypeOfSIMDType(sig->retTypeSigClass) == TYP_FLOAT);
605608
op1 = impSIMDPopStack(TYP_SIMD16);

0 commit comments

Comments
 (0)