adding __have_native_{rsqrtd,rcpd} to select between native support for double precision reciprocals and using slower but safe version in stdlib
This commit is contained in:
@@ -191,13 +191,13 @@ declare <WIDTH x double> @__max_varying_double(<WIDTH x double>,
|
||||
|
||||
declare float @__rsqrt_uniform_float(float) nounwind readnone
|
||||
declare float @__rcp_uniform_float(float) nounwind readnone
|
||||
declare double @__rsqrt_uniform_double(double, <WIDTH x MASK>) nounwind readnone
|
||||
declare double @__rcp_uniform_double(double, <WIDTH x MASK>) nounwind readnone
|
||||
declare double @__rsqrt_uniform_double(double) nounwind readnone
|
||||
declare double @__rcp_uniform_double(double) nounwind readnone
|
||||
declare float @__sqrt_uniform_float(float) nounwind readnone
|
||||
declare <WIDTH x float> @__rcp_varying_float(<WIDTH x float>) nounwind readnone
|
||||
declare <WIDTH x float> @__rsqrt_varying_float(<WIDTH x float>) nounwind readnone
|
||||
declare <WIDTH x double> @__rcp_varying_double(<WIDTH x double>, <WIDTH x MASK>) nounwind readnone
|
||||
declare <WIDTH x double> @__rsqrt_varying_double(<WIDTH x double>, <WIDTH x MASK>) nounwind readnone
|
||||
declare <WIDTH x double> @__rcp_varying_double(<WIDTH x double>) nounwind readnone
|
||||
declare <WIDTH x double> @__rsqrt_varying_double(<WIDTH x double>) nounwind readnone
|
||||
|
||||
declare <WIDTH x float> @__sqrt_varying_float(<WIDTH x float>) nounwind readnone
|
||||
|
||||
|
||||
@@ -4533,31 +4533,11 @@ define_down_avgs()
|
||||
')
|
||||
|
||||
define(`rsqrt_double', `
|
||||
declare double @__rsqrt_safe_uniform_double___und(double, <WIDTH x MASK>)
|
||||
define double @__rsqrt_uniform_double(double, <WIDTH x MASK>) nounwind alwaysinline readnone
|
||||
{
|
||||
%res = call double @__rsqrt_safe_uniform_double___und(double %0, <WIDTH x MASK> %1)
|
||||
ret double %res
|
||||
}
|
||||
declare <WIDTH x double> @__rsqrt_safe_varying_double___vyd(<WIDTH x double>, <WIDTH x MASK>)
|
||||
define <WIDTH x double> @__rsqrt_varying_double(<WIDTH x double>, <WIDTH x MASK>) nounwind alwaysinline readnone
|
||||
{
|
||||
%res = call <WIDTH x double> @__rsqrt_safe_varying_double___vyd(<WIDTH x double> %0, <WIDTH x MASK> %1)
|
||||
ret <WIDTH x double> %res
|
||||
}
|
||||
declare double @__rsqrt_uniform_double(double)
|
||||
declare <WIDTH x double> @__rsqrt_varying_double(<WIDTH x double>)
|
||||
')
|
||||
|
||||
define(`rcp_double', `
|
||||
declare double @__rcp_safe_uniform_double___und(double, <WIDTH x MASK>)
|
||||
define double @__rcp_uniform_double(double, <WIDTH x MASK>) nounwind alwaysinline readnone
|
||||
{
|
||||
%res = call double @__rcp_safe_uniform_double___und(double %0, <WIDTH x MASK> %1)
|
||||
ret double %res
|
||||
}
|
||||
declare <WIDTH x double> @__rcp_safe_varying_double___vyd(<WIDTH x double>, <WIDTH x MASK>)
|
||||
define <WIDTH x double> @__rcp_varying_double(<WIDTH x double>, <WIDTH x MASK>) nounwind alwaysinline readnone
|
||||
{
|
||||
%res = call <WIDTH x double> @__rcp_safe_varying_double___vyd(<WIDTH x double> %0, <WIDTH x MASK> %1)
|
||||
ret <WIDTH x double> %res
|
||||
}
|
||||
declare double @__rcp_uniform_double(double)
|
||||
declare <WIDTH x double> @__rcp_varying_double(<WIDTH x double>)
|
||||
')
|
||||
|
||||
Reference in New Issue
Block a user