@@ -41,7 +41,7 @@ elseif Sys.iswindows()
41
41
const libquadmath = " libquadmath-0.dll"
42
42
end
43
43
44
- macro ccall (expr)
44
+ macro quad_ccall (expr)
45
45
@assert expr isa Expr && expr. head == :(:: )
46
46
ret_type = expr. args[2 ]
47
47
@@ -139,15 +139,15 @@ Float128(x::Float128) = x
139
139
140
140
# Float64
141
141
@assume_effects :foldable Float128 (x:: Float64 ) =
142
- Float128 (@ccall (quadoplib. __extenddftf2 (x:: Cdouble ):: Cfloat128 ))
142
+ Float128 (@quad_ccall (quadoplib. __extenddftf2 (x:: Cdouble ):: Cfloat128 ))
143
143
@assume_effects :foldable Float64 (x:: Float128 ) =
144
- @ccall (quadoplib. __trunctfdf2 (x:: Cfloat128 ):: Cdouble )
144
+ @quad_ccall (quadoplib. __trunctfdf2 (x:: Cfloat128 ):: Cdouble )
145
145
146
146
# Float32
147
147
@assume_effects :foldable Float128 (x:: Float32 ) =
148
- Float128 (@ccall (quadoplib. __extendsftf2 (x:: Cfloat ):: Cfloat128 ))
148
+ Float128 (@quad_ccall (quadoplib. __extendsftf2 (x:: Cfloat ):: Cfloat128 ))
149
149
@assume_effects :foldable Float32 (x:: Float128 ) =
150
- @ccall (quadoplib. __trunctfsf2 (x:: Cfloat128 ):: Cfloat )
150
+ @quad_ccall (quadoplib. __trunctfsf2 (x:: Cfloat128 ):: Cfloat )
151
151
152
152
# Float16
153
153
Float128 (x:: Float16 ) = Float128 (Float32 (x))
@@ -159,16 +159,16 @@ Float128(x::Base.TwicePrecision{Float64}) =
159
159
160
160
# integer -> Float128
161
161
@assume_effects :foldable Float128 (x:: Int32 ) =
162
- Float128 (@ccall (quadoplib. __floatsitf (x:: Int32 ):: Cfloat128 ))
162
+ Float128 (@quad_ccall (quadoplib. __floatsitf (x:: Int32 ):: Cfloat128 ))
163
163
164
164
@assume_effects :foldable Float128 (x:: UInt32 ) =
165
- Float128 (@ccall (quadoplib. __floatunsitf (x:: UInt32 ):: Cfloat128 ))
165
+ Float128 (@quad_ccall (quadoplib. __floatunsitf (x:: UInt32 ):: Cfloat128 ))
166
166
167
167
@assume_effects :foldable Float128 (x:: Int64 ) =
168
- Float128 (@ccall (quadoplib. __floatditf (x:: Int64 ):: Cfloat128 ))
168
+ Float128 (@quad_ccall (quadoplib. __floatditf (x:: Int64 ):: Cfloat128 ))
169
169
170
170
@assume_effects :foldable Float128 (x:: UInt64 ) =
171
- Float128 (@ccall (quadoplib. __floatunditf (x:: UInt64 ):: Cfloat128 ))
171
+ Float128 (@quad_ccall (quadoplib. __floatunditf (x:: UInt64 ):: Cfloat128 ))
172
172
173
173
Float128 (x:: Int16 ) = Float128 (Int32 (x))
174
174
Float128 (x:: Int8 ) = Float128 (Int32 (x))
@@ -230,37 +230,37 @@ Float128(x::Bool) = x ? Float128(1) : Float128(0)
230
230
231
231
# Comparison
232
232
@assume_effects :foldable (== )(x:: Float128 , y:: Float128 ) =
233
- @ccall (quadoplib. __eqtf2 (x:: Cfloat128 , y:: Cfloat128 ):: Cint ) == 0
233
+ @quad_ccall (quadoplib. __eqtf2 (x:: Cfloat128 , y:: Cfloat128 ):: Cint ) == 0
234
234
@assume_effects :foldable (< )(x:: Float128 , y:: Float128 ) =
235
- @ccall (quadoplib. __letf2 (x:: Cfloat128 , y:: Cfloat128 ):: Cint ) == - 1
235
+ @quad_ccall (quadoplib. __letf2 (x:: Cfloat128 , y:: Cfloat128 ):: Cint ) == - 1
236
236
@assume_effects :foldable (<= )(x:: Float128 , y:: Float128 ) =
237
- @ccall (quadoplib. __letf2 (x:: Cfloat128 , y:: Cfloat128 ):: Cint ) <= 0
237
+ @quad_ccall (quadoplib. __letf2 (x:: Cfloat128 , y:: Cfloat128 ):: Cint ) <= 0
238
238
239
239
# Arithmetic
240
240
@assume_effects :foldable (+ )(x:: Float128 , y:: Float128 ) =
241
- Float128 (@ccall (quadoplib. __addtf3 (x:: Cfloat128 , y:: Cfloat128 ):: Cfloat128 ))
241
+ Float128 (@quad_ccall (quadoplib. __addtf3 (x:: Cfloat128 , y:: Cfloat128 ):: Cfloat128 ))
242
242
@assume_effects :foldable (- )(x:: Float128 , y:: Float128 ) =
243
- Float128 (@ccall (quadoplib. __subtf3 (x:: Cfloat128 , y:: Cfloat128 ):: Cfloat128 ))
243
+ Float128 (@quad_ccall (quadoplib. __subtf3 (x:: Cfloat128 , y:: Cfloat128 ):: Cfloat128 ))
244
244
@assume_effects :foldable (* )(x:: Float128 , y:: Float128 ) =
245
- Float128 (@ccall (quadoplib. __multf3 (x:: Cfloat128 , y:: Cfloat128 ):: Cfloat128 ))
245
+ Float128 (@quad_ccall (quadoplib. __multf3 (x:: Cfloat128 , y:: Cfloat128 ):: Cfloat128 ))
246
246
@assume_effects :foldable (/ )(x:: Float128 , y:: Float128 ) =
247
- Float128 (@ccall (quadoplib. __divtf3 (x:: Cfloat128 , y:: Cfloat128 ):: Cfloat128 ))
247
+ Float128 (@quad_ccall (quadoplib. __divtf3 (x:: Cfloat128 , y:: Cfloat128 ):: Cfloat128 ))
248
248
249
249
@assume_effects :foldable (- )(x:: Float128 ) =
250
- Float128 (@ccall (quadoplib. __negtf2 (x:: Cfloat128 ):: Cfloat128 ))
250
+ Float128 (@quad_ccall (quadoplib. __negtf2 (x:: Cfloat128 ):: Cfloat128 ))
251
251
252
252
# Float128 -> Integer
253
253
@assume_effects :foldable unsafe_trunc (:: Type{Int32} , x:: Float128 ) =
254
- @ccall (quadoplib. __fixtfsi (x:: Cfloat128 ):: Int32 )
254
+ @quad_ccall (quadoplib. __fixtfsi (x:: Cfloat128 ):: Int32 )
255
255
256
256
@assume_effects :foldable unsafe_trunc (:: Type{Int64} , x:: Float128 ) =
257
- @ccall (quadoplib. __fixtfdi (x:: Cfloat128 ):: Int64 )
257
+ @quad_ccall (quadoplib. __fixtfdi (x:: Cfloat128 ):: Int64 )
258
258
259
259
@assume_effects :foldable unsafe_trunc (:: Type{UInt32} , x:: Float128 ) =
260
- @ccall (quadoplib. __fixunstfsi (x:: Cfloat128 ):: UInt32 )
260
+ @quad_ccall (quadoplib. __fixunstfsi (x:: Cfloat128 ):: UInt32 )
261
261
262
262
@assume_effects :foldable unsafe_trunc (:: Type{UInt64} , x:: Float128 ) =
263
- @ccall (quadoplib. __fixunstfdi (x:: Cfloat128 ):: UInt64 )
263
+ @quad_ccall (quadoplib. __fixunstfdi (x:: Cfloat128 ):: UInt64 )
264
264
265
265
function unsafe_trunc (:: Type{UInt128} , x:: Float128 )
266
266
xu = reinterpret (UInt128,x)
@@ -332,19 +332,19 @@ for f in (:acos, :acosh, :asin, :asinh, :atan, :atanh, :cosh, :cos,
332
332
:sin , :sinh , :sqrt , :tan , :tanh ,
333
333
:ceil , :floor , :trunc , )
334
334
@eval @assume_effects :foldable function $f (x:: Float128 )
335
- Float128 (@ccall (libquadmath.$ (string (f,:q ))(x:: Cfloat128 ):: Cfloat128 ))
335
+ Float128 (@quad_ccall (libquadmath.$ (string (f,:q ))(x:: Cfloat128 ):: Cfloat128 ))
336
336
end
337
337
end
338
338
339
- @assume_effects :foldable abs (x:: Float128 ) = Float128 (@ccall (libquadmath. fabsq (x:: Cfloat128 ):: Cfloat128 ))
340
- @assume_effects :foldable round (x:: Float128 ) = Float128 (@ccall (libquadmath. rintq (x:: Cfloat128 ):: Cfloat128 ))
339
+ @assume_effects :foldable abs (x:: Float128 ) = Float128 (@quad_ccall (libquadmath. fabsq (x:: Cfloat128 ):: Cfloat128 ))
340
+ @assume_effects :foldable round (x:: Float128 ) = Float128 (@quad_ccall (libquadmath. rintq (x:: Cfloat128 ):: Cfloat128 ))
341
341
round (x:: Float128 , r:: RoundingMode{:Down} ) = floor (x)
342
342
round (x:: Float128 , r:: RoundingMode{:Up} ) = ceil (x)
343
343
round (x:: Float128 , r:: RoundingMode{:ToZero} ) = round (x)
344
344
345
345
# # two argument
346
346
@assume_effects :foldable (^ )(x:: Float128 , y:: Float128 ) =
347
- Float128 (@ccall (libquadmath. powq (x:: Cfloat128 , y:: Cfloat128 ):: Cfloat128 ))
347
+ Float128 (@quad_ccall (libquadmath. powq (x:: Cfloat128 , y:: Cfloat128 ):: Cfloat128 ))
348
348
349
349
# circumvent a failure in Base
350
350
function (^ )(x:: Float128 , p:: Integer )
@@ -355,15 +355,15 @@ function (^)(x::Float128, p::Integer)
355
355
end
356
356
end
357
357
@assume_effects :foldable copysign (x:: Float128 , y:: Float128 ) =
358
- Float128 (@ccall (libquadmath. copysignq (x:: Cfloat128 , y:: Cfloat128 ):: Cfloat128 ))
358
+ Float128 (@quad_ccall (libquadmath. copysignq (x:: Cfloat128 , y:: Cfloat128 ):: Cfloat128 ))
359
359
@assume_effects :foldable hypot (x:: Float128 , y:: Float128 ) =
360
- Float128 (@ccall (libquadmath. hypotq (x:: Cfloat128 , y:: Cfloat128 ):: Cfloat128 ))
360
+ Float128 (@quad_ccall (libquadmath. hypotq (x:: Cfloat128 , y:: Cfloat128 ):: Cfloat128 ))
361
361
@assume_effects :foldable atan (x:: Float128 , y:: Float128 ) =
362
- Float128 (@ccall (libquadmath. atan2q (x:: Cfloat128 , y:: Cfloat128 ):: Cfloat128 ))
362
+ Float128 (@quad_ccall (libquadmath. atan2q (x:: Cfloat128 , y:: Cfloat128 ):: Cfloat128 ))
363
363
364
364
Base. Integer (x:: Float128 ) = Int (x)
365
365
@assume_effects :foldable Base. rem (x:: Float128 , y:: Float128 ) =
366
- Float128 (@ccall (libquadmath. remainderq (x:: Cfloat128 , y:: Cfloat128 ):: Cfloat128 ))
366
+ Float128 (@quad_ccall (libquadmath. remainderq (x:: Cfloat128 , y:: Cfloat128 ):: Cfloat128 ))
367
367
368
368
sincos (x:: Float128 ) = (sin (x), cos (x))
369
369
@@ -372,12 +372,12 @@ sincos(x::Float128) = (sin(x), cos(x))
372
372
# disable fma on Windows until rounding mode issue fixed
373
373
# https://github.com/JuliaMath/Quadmath.jl/issues/31
374
374
@assume_effects :foldable fma (x:: Float128 , y:: Float128 , z:: Float128 ) =
375
- Float128 (@ccall (libquadmath. fmaq (x:: Cfloat128 , y:: Cfloat128 , z:: Cfloat128 ):: Cfloat128 ))
375
+ Float128 (@quad_ccall (libquadmath. fmaq (x:: Cfloat128 , y:: Cfloat128 , z:: Cfloat128 ):: Cfloat128 ))
376
376
end
377
377
378
- @assume_effects :foldable isnan (x:: Float128 ) = 0 != @ccall (libquadmath. isnanq (x:: Cfloat128 ):: Cint )
379
- @assume_effects :foldable isinf (x:: Float128 ) = 0 != @ccall (libquadmath. isinfq (x:: Cfloat128 ):: Cint )
380
- @assume_effects :foldable isfinite (x:: Float128 ) = 0 != @ccall (libquadmath. finiteq (x:: Cfloat128 ):: Cint )
378
+ @assume_effects :foldable isnan (x:: Float128 ) = 0 != @quad_ccall (libquadmath. isnanq (x:: Cfloat128 ):: Cint )
379
+ @assume_effects :foldable isinf (x:: Float128 ) = 0 != @quad_ccall (libquadmath. isinfq (x:: Cfloat128 ):: Cint )
380
+ @assume_effects :foldable isfinite (x:: Float128 ) = 0 != @quad_ccall (libquadmath. finiteq (x:: Cfloat128 ):: Cint )
381
381
382
382
isinteger (x:: Float128 ) = isfinite (x) && x === trunc (x)
383
383
@@ -402,14 +402,14 @@ typemax(::Type{Float128}) = Inf128
402
402
typemin (:: Type{Float128} ) = - Inf128
403
403
404
404
@assume_effects :foldable ldexp (x:: Float128 , n:: Cint ) =
405
- Float128 (@ccall (libquadmath. ldexpq (x:: Cfloat128 , n:: Cint ):: Cfloat128 ))
405
+ Float128 (@quad_ccall (libquadmath. ldexpq (x:: Cfloat128 , n:: Cint ):: Cfloat128 ))
406
406
ldexp (x:: Float128 , n:: Integer ) =
407
407
ldexp (x, clamp (n, typemin (Cint), typemax (Cint)) % Cint)
408
408
409
409
410
410
@assume_effects :foldable function frexp (x:: Float128 )
411
411
ri = Ref {Cint} ()
412
- f = Float128 (@ccall (libquadmath. frexpq (x:: Cfloat128 , ri:: Ptr{Cint} ):: Cfloat128 ))
412
+ f = Float128 (@quad_ccall (libquadmath. frexpq (x:: Cfloat128 , ri:: Ptr{Cint} ):: Cfloat128 ))
413
413
return f, Int (ri[])
414
414
end
415
415
@@ -613,13 +613,13 @@ end
613
613
614
614
# TODO : need to do this better
615
615
function parse (:: Type{Float128} , s:: AbstractString )
616
- Float128 (@ccall (libquadmath. strtoflt128 (s:: Cstring , C_NULL :: Ptr{Ptr{Cchar}} ):: Cfloat128 ))
616
+ Float128 (@quad_ccall (libquadmath. strtoflt128 (s:: Cstring , C_NULL :: Ptr{Ptr{Cchar}} ):: Cfloat128 ))
617
617
end
618
618
619
619
function string (x:: Float128 )
620
620
lng = 64
621
621
buf = Array {UInt8} (undef, lng + 1 )
622
- lng = @ccall (libquadmath. quadmath_snprintf (buf:: Ptr{UInt8} , (lng+ 1 ):: Csize_t , " %.35Qe" :: Ptr{UInt8} , x:: (Cfloat128...) ):: Cint )
622
+ lng = @quad_ccall (libquadmath. quadmath_snprintf (buf:: Ptr{UInt8} , (lng+ 1 ):: Csize_t , " %.35Qe" :: Ptr{UInt8} , x:: (Cfloat128...) ):: Cint )
623
623
return String (resize! (buf, lng))
624
624
end
625
625
0 commit comments