@@ -92,7 +92,6 @@ const t_log_Float64 = ((0.0,0.0),(0.007782140442941454,-8.865052917267247e-13),
9292 (0.6853040030982811 ,6.383161517064652e-13 ),(0.6892332812385575 ,2.5144230728376075e-13 ),
9393 (0.6931471805601177 ,- 1.7239444525614835e-13 ))
9494
95-
9695# Float32 lookup table
9796# to generate values:
9897 # N=16
@@ -156,7 +155,12 @@ logbU(::Type{Float64},::Val{10}) = 0.4342944819032518
156155logbL (:: Type{Float64} ,:: Val{10} ) = 1.098319650216765e-17
157156
158157# Procedure 1
159- @inline function log_proc1 (y:: Float64 ,mf:: Float64 ,F:: Float64 ,f:: Float64 ,jp:: Int ,base= Val (:ℯ ))
158+ # XXX we want to mark :consistent-cy here so that this function can be concrete-folded,
159+ # because the effect analysis currently can't prove it in the presence of `@inbounds` or
160+ # `:boundscheck`, but still the access to `t_log_Float64` is really safe here
161+ Base. @assume_effects :consistent @inline function log_proc1 (y:: Float64 ,mf:: Float64 ,F:: Float64 ,f:: Float64 ,base= Val (:ℯ ))
162+ jp = unsafe_trunc (Int,128.0 * F)- 127
163+
160164 # # Steps 1 and 2
161165 @inbounds hi,lo = t_log_Float64[jp]
162166 l_hi = mf* 0.6931471805601177 + hi
211215 return fma (m_hi, u, fma (m_lo, u, m_hi* fma (fma (- u,f,2 (f- u)), g, q)))
212216end
213217
218+ # Procedure 1
219+ # XXX we want to mark :consistent-cy here so that this function can be concrete-folded,
220+ # because the effect analysis currently can't prove it in the presence of `@inbounds` or
221+ # `:boundscheck`, but still the access to `t_log_Float32` is really safe here
222+ Base. @assume_effects :consistent @inline function log_proc1 (y:: Float32 ,mf:: Float32 ,F:: Float32 ,f:: Float32 ,base= Val (:ℯ ))
223+ jp = unsafe_trunc (Int,128.0f0 * F)- 127
214224
215- @inline function log_proc1 (y:: Float32 ,mf:: Float32 ,F:: Float32 ,f:: Float32 ,jp:: Int ,base= Val (:ℯ ))
216225 # # Steps 1 and 2
217226 @inbounds hi = t_log_Float32[jp]
218227 l = mf* 0.6931471805599453 + hi
232241 Float32 (logb (Float32, base)* (l + (u + q)))
233242end
234243
244+ # Procedure 2
235245@inline function log_proc2 (f:: Float32 ,base= Val (:ℯ ))
236246 # # Step 1
237247 # compute in higher precision
@@ -281,9 +291,8 @@ function _log(x::Float64, base, func)
281291 mf = Float64 (m)
282292 F = (y + 3.5184372088832e13 ) - 3.5184372088832e13 # 0x1p-7*round(0x1p7*y)
283293 f = y- F
284- jp = unsafe_trunc (Int,128.0 * F)- 127
285294
286- return log_proc1 (y,mf,F,f,jp, base)
295+ return log_proc1 (y,mf,F,f,base)
287296 elseif x == 0.0
288297 - Inf
289298 elseif isnan (x)
@@ -317,9 +326,8 @@ function _log(x::Float32, base, func)
317326 mf = Float32 (m)
318327 F = (y + 65536.0f0 ) - 65536.0f0 # 0x1p-7*round(0x1p7*y)
319328 f = y- F
320- jp = unsafe_trunc (Int,128.0f0 * F)- 127
321329
322- log_proc1 (y,mf,F,f,jp, base)
330+ log_proc1 (y,mf,F,f,base)
323331 elseif x == 0f0
324332 - Inf32
325333 elseif isnan (x)
@@ -352,9 +360,8 @@ function log1p(x::Float64)
352360 mf = Float64 (m)
353361 F = (y + 3.5184372088832e13 ) - 3.5184372088832e13 # 0x1p-7*round(0x1p7*y)
354362 f = (y - F) + c* s # 2^m(F+f) = 1+x = z+c
355- jp = unsafe_trunc (Int,128.0 * F)- 127
356363
357- log_proc1 (y,mf,F,f,jp )
364+ log_proc1 (y,mf,F,f)
358365 elseif x == - 1.0
359366 - Inf
360367 elseif isnan (x)
@@ -385,9 +392,8 @@ function log1p(x::Float32)
385392 mf = Float32 (m)
386393 F = (y + 65536.0f0 ) - 65536.0f0 # 0x1p-7*round(0x1p7*y)
387394 f = (y - F) + s* c # 2^m(F+f) = 1+x = z+c
388- jp = unsafe_trunc (Int,128.0 * F)- 127
389395
390- log_proc1 (y,mf,F,f,jp )
396+ log_proc1 (y,mf,F,f)
391397 elseif x == - 1f0
392398 - Inf32
393399 elseif isnan (x)
0 commit comments