Skip to content

Commit a365a11

Browse files
committed
call different functions on Linux
1 parent 24491ff commit a365a11

File tree

1 file changed

+18
-15
lines changed

1 file changed

+18
-15
lines changed

src/Quadmath.jl

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,13 @@ import Base: (*), +, -, /, <, <=, ==, ^, convert,
1919
eps, realmin, realmax, isinf, isnan, isfinite
2020

2121
if is_apple()
22+
const quadoplib = "libquadmath.0"
2223
const libquadmath = "libquadmath.0"
2324
elseif is_unix()
25+
const quadoplib = "libgcc_s"
2426
const libquadmath = "libquadmath.so.0"
2527
elseif is_windows()
28+
const quadoplib = "libgcc_s_seh-1.dll"
2629
const libquadmath = "libquadmath-0.dll"
2730
end
2831

@@ -71,52 +74,52 @@ fpinttype(::Type{Float128}) = UInt128
7174

7275
## Float64
7376
convert(::Type{Float128}, x::Float64) =
74-
Float128(ccall((:__extenddftf2, libquadmath), Cfloat128, (Cdouble,), x))
77+
Float128(ccall((:__extenddftf2, quadoplib), Cfloat128, (Cdouble,), x))
7578
convert(::Type{Float64}, x::Float128) =
76-
ccall((:__trunctfdf2, libquadmath), Cdouble, (Cfloat128,), x)
79+
ccall((:__trunctfdf2, quadoplib), Cdouble, (Cfloat128,), x)
7780

7881
## Cint (Int32)
7982
convert(::Type{Cint}, x::Float128) =
80-
ccall((:__fixtfsi, libquadmath), Cint, (Cfloat128,), x)
83+
ccall((:__fixtfsi, quadoplib), Cint, (Cfloat128,), x)
8184
convert(::Type{Float128}, x::Cint) =
82-
Float128(ccall((:__floatsitf, libquadmath), Cfloat128, (Cint,), x))
85+
Float128(ccall((:__floatsitf, quadoplib), Cfloat128, (Cint,), x))
8386

8487
## Cuint (UInt32)
8588
convert(::Type{Float128}, x::Cuint) =
86-
Float128(ccall((:__floatunsitf, libquadmath), Cfloat128, (Cuint,), x))
89+
Float128(ccall((:__floatunsitf, quadoplib), Cfloat128, (Cuint,), x))
8790

8891
## Clong (Int64 on unix)
8992
if !is_windows()
9093
convert(::Type{Clong}, x::Float128) =
91-
ccall((:__fixtfdi, libquadmath), Clong, (Cfloat128,), x)
94+
ccall((:__fixtfdi, quadoplib), Clong, (Cfloat128,), x)
9295
convert(::Type{Float128}, x::Clong) =
93-
Float128(ccall((:__floatditf, libquadmath), Cfloat128, (Clong,), x))
96+
Float128(ccall((:__floatditf, quadoplib), Cfloat128, (Clong,), x))
9497
end
9598

9699

97100
# comparison
98101

99102
(==)(x::Float128, y::Float128) =
100-
ccall((:__eqtf2,libquadmath), Cint, (Cfloat128,Cfloat128), x, y) == 0
103+
ccall((:__eqtf2,quadoplib), Cint, (Cfloat128,Cfloat128), x, y) == 0
101104

102105
(<)(x::Float128, y::Float128) =
103-
ccall((:__letf2,libquadmath), Cint, (Cfloat128,Cfloat128), x, y) == -1
106+
ccall((:__letf2,quadoplib), Cint, (Cfloat128,Cfloat128), x, y) == -1
104107

105108
(<=)(x::Float128, y::Float128) =
106-
ccall((:__letf2,libquadmath), Cint, (Cfloat128,Cfloat128), x, y) <= 0
109+
ccall((:__letf2,quadoplib), Cint, (Cfloat128,Cfloat128), x, y) <= 0
107110

108111
# arithmetic
109112

110113
(+)(x::Float128, y::Float128) =
111-
Float128(ccall((:__addtf3,libquadmath), Cfloat128, (Cfloat128,Cfloat128), x, y))
114+
Float128(ccall((:__addtf3,quadoplib), Cfloat128, (Cfloat128,Cfloat128), x, y))
112115
(-)(x::Float128, y::Float128) =
113-
Float128(ccall((:__subtf3,libquadmath), Cfloat128, (Cfloat128,Cfloat128), x, y))
116+
Float128(ccall((:__subtf3,quadoplib), Cfloat128, (Cfloat128,Cfloat128), x, y))
114117
(*)(x::Float128, y::Float128) =
115-
Float128(ccall((:__multf3,libquadmath), Cfloat128, (Cfloat128,Cfloat128), x, y))
118+
Float128(ccall((:__multf3,quadoplib), Cfloat128, (Cfloat128,Cfloat128), x, y))
116119
(/)(x::Float128, y::Float128) =
117-
Float128(ccall((:__divtf3,libquadmath), Cfloat128, (Cfloat128,Cfloat128), x, y))
120+
Float128(ccall((:__divtf3,quadoplib), Cfloat128, (Cfloat128,Cfloat128), x, y))
118121
(-)(x::Float128) =
119-
Float128(ccall((:__negtf2,libquadmath), Cfloat128, (Cfloat128,), x))
122+
Float128(ccall((:__negtf2,quadoplib), Cfloat128, (Cfloat128,), x))
120123

121124
# math
122125

0 commit comments

Comments
 (0)