Commit 9f737d37 by Nicolas Capens Committed by Nicolas Capens

Emulate vector square root intrinsic.

Bug b/64034197 Change-Id: I2d77dcb2f93b21abeb0eac1dcb8ca02ef6e5796b Reviewed-on: https://swiftshader-review.googlesource.com/10957Tested-by: 's avatarNicolas Capens <nicolascapens@google.com> Reviewed-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <nicolascapens@google.com>
parent afe27e92
......@@ -6833,14 +6833,27 @@ namespace sw
RValue<Float4> Sqrt(RValue<Float4> x)
{
Ice::Variable *result = ::function->makeVariable(Ice::IceType_v4f32);
const Ice::Intrinsics::IntrinsicInfo intrinsic = {Ice::Intrinsics::Sqrt, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F};
auto target = ::context->getConstantUndef(Ice::IceType_i32);
auto sqrt = Ice::InstIntrinsicCall::create(::function, 1, result, target, intrinsic);
sqrt->addArg(x.value);
::basicBlock->appendInst(sqrt);
if(emulateIntrinsics)
{
Float4 result;
result.x = Sqrt(Float(Float4(x).x));
result.y = Sqrt(Float(Float4(x).y));
result.z = Sqrt(Float(Float4(x).z));
result.w = Sqrt(Float(Float4(x).w));
return RValue<Float4>(V(result));
return result;
}
else
{
Ice::Variable *result = ::function->makeVariable(Ice::IceType_v4f32);
const Ice::Intrinsics::IntrinsicInfo intrinsic = {Ice::Intrinsics::Sqrt, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F};
auto target = ::context->getConstantUndef(Ice::IceType_i32);
auto sqrt = Ice::InstIntrinsicCall::create(::function, 1, result, target, intrinsic);
sqrt->addArg(x.value);
::basicBlock->appendInst(sqrt);
return RValue<Float4>(V(result));
}
}
RValue<Float4> Insert(RValue<Float4> x, RValue<Float> element, int i)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment