Skip to content

Commit dfeffb9

Browse files
library locations
1 parent 8592336 commit dfeffb9

File tree

2 files changed

+56
-55
lines changed

2 files changed

+56
-55
lines changed

deps/src/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ LIBMPFR = /usr/lib/x86_64-linux-gnu/libmpfr.so.4
2222

2323

2424
OBJS = quadmath_wrapper.o get_float128.o set_float128.o
25-
#LIBS += -lquadmath -L/usr/lib/x86_64-linux-gnu -lmpfr -lgmp -lm
25+
LIBS += $(LIBMPFR) -lquadmath -lm
2626
#LIBS += -lquadmath -lm
2727

2828
# Figure out OS and architecture

src/Quadmath.jl

Lines changed: 55 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
module float128
1+
module Quadmath
22

3-
export Complex256
3+
export Float128, Complex256
44

55
import
66
Base: +, -, (*), /, <, <=, ==, >, >=, ^, convert, promote_rule,
@@ -18,22 +18,23 @@ import
1818

1919
import Base.GMP: ClongMax, CulongMax, CdoubleMax
2020

21-
#bitstype 128 Float128 <: AbstractFloat # this is in base/boot.jl
21+
bitstype 128 Float128 <: AbstractFloat # this is in base/boot.jl
2222
#Note: with "<: AbstracFloat" multiplication of two Float128 numbers
2323
#mysteriously doesn't work!
2424

2525
typealias Complex256 Complex{Float128}
2626

27-
27+
const libquadmath_wrapper = joinpath(dirname(@__FILE__),
28+
"..", "deps", "usr", "lib", "libquadmath_wrapper.so")
2829

2930
convert(::Type{Float128}, x::Float128) = x
3031

3132
convert(::Type{Float128}, x::Clong) =
32-
ccall((:convert_qsi, :libfloat128), Float128, ( Clong, ), x )
33+
ccall((:convert_qsi, libquadmath_wrapper), Float128, ( Clong, ), x )
3334
convert(::Type{Float128}, x::Culong) =
34-
ccall((:convert_qui, :libfloat128), Float128, ( Culong, ), x )
35+
ccall((:convert_qui, libquadmath_wrapper), Float128, ( Culong, ), x )
3536
convert(::Type{Float128}, x::Float64) =
36-
ccall((:convert_qd, :libfloat128), Float128, ( Float64, ), x )
37+
ccall((:convert_qd, libquadmath_wrapper), Float128, ( Float64, ), x )
3738

3839
#convert(::Type{Float128}, x::Integer) = Float128(BigInt(x))
3940

@@ -45,14 +46,14 @@ convert(::Type{Float128}, x::Rational) = Float128(num(x)) / Float128(den(x))
4546

4647
## Float128 -> AbstractFloat
4748
convert(::Type{Float64}, x::Float128) =
48-
ccall((:convert_dq,:libfloat128), Float64, (Float128,), x)
49+
ccall((:convert_dq,libquadmath_wrapper), Float64, (Float128,), x)
4950
convert(::Type{Float32}, x::Float128) =
50-
ccall((:convert_fq,:libfloat128), Float32, (Float128,), x)
51+
ccall((:convert_fq,libquadmath_wrapper), Float32, (Float128,), x)
5152

5253
call(::Type{Float64}, x::Float128, r::RoundingMode) =
53-
ccall((:convert_dq,:libfloat128), Float64, (Float128,), x)
54+
ccall((:convert_dq,libquadmath_wrapper), Float64, (Float128,), x)
5455
call(::Type{Float32}, x::Float128, r::RoundingMode) =
55-
ccall((:convert_fq,:libfloat128), Float32, (Float128,), x)
56+
ccall((:convert_fq,libquadmath_wrapper), Float32, (Float128,), x)
5657
# TODO: avoid double rounding
5758
call(::Type{Float16}, x::Float128, r::RoundingMode) =
5859
convert(Float16, call(Float32, x, r))
@@ -63,42 +64,42 @@ promote_rule{T<:AbstractFloat}(::Type{Float128},::Type{T}) = Float128
6364

6465

6566
function tryparse(::Type{Float128}, s::AbstractString, base::Int=0)
66-
Nullable(ccall((:set_str_q, :libfloat128), Float128, (Cstring, ), s))
67+
Nullable(ccall((:set_str_q, libquadmath_wrapper), Float128, (Cstring, ), s))
6768
end
6869

6970
# Basic arithmetic without promotion
7071
for (fJ, fC) in ((:+,:add), (:-,:sub), (:/,:div), (:(*),:mul))
7172
@eval begin
7273
#Float128
7374
function ($fJ)(x::Float128, y::Float128)
74-
ccall(($(string(fC,:_q)),:libfloat128), Float128, (Float128, Float128), x, y)
75+
ccall(($(string(fC,:_q)),libquadmath_wrapper), Float128, (Float128, Float128), x, y)
7576
end
7677

7778
#Unsigned Integer
7879
function ($fJ)(x::Float128, y::CulongMax)
79-
ccall(($(string(fC,:_qui)),:libfloat128), Float128, (Float128, Culong), x, y)
80+
ccall(($(string(fC,:_qui)),libquadmath_wrapper), Float128, (Float128, Culong), x, y)
8081
end
8182

8283
function ($fJ)(x::CulongMax, y::Float128)
83-
ccall(($(string(fC,:_uiq)),:libfloat128), Float128, (Culong, Float128), x, y)
84+
ccall(($(string(fC,:_uiq)),libquadmath_wrapper), Float128, (Culong, Float128), x, y)
8485
end
8586

8687
#Signed Integer
8788
function ($fJ)(x::Float128, y::ClongMax)
88-
ccall(($(string(fC,:_qsi)),:libfloat128), Float128, (Float128, Clong), x, y)
89+
ccall(($(string(fC,:_qsi)),libquadmath_wrapper), Float128, (Float128, Clong), x, y)
8990
end
9091

9192
function ($fJ)(x::ClongMax, y::Float128)
92-
ccall(($(string(fC,:_siq)),:libfloat128), Float128, (Clong, Float128), x, y)
93+
ccall(($(string(fC,:_siq)),libquadmath_wrapper), Float128, (Clong, Float128), x, y)
9394
end
9495

9596
# Float32, Float64
9697
function ($fJ)(x::Float128, y::CdoubleMax)
97-
ccall(($(string(fC,:_qd)),:libfloat128), Float128, (Float128, Cdouble), x, y)
98+
ccall(($(string(fC,:_qd)),libquadmath_wrapper), Float128, (Float128, Cdouble), x, y)
9899
end
99100

100101
function ($fJ)(x::CdoubleMax, y::Float128,)
101-
ccall(($(string(fC,:_dq)),:libfloat128), Float128, (Cdouble, Float128), x, y)
102+
ccall(($(string(fC,:_dq)),libquadmath_wrapper), Float128, (Cdouble, Float128), x, y)
102103
end
103104
end
104105
end
@@ -108,43 +109,43 @@ for (fJ, fC) in ((:+,:cadd), (:-,:csub), (:/,:cdiv), (:(*),:cmul))
108109
@eval begin
109110
#Float128
110111
function ($fJ)(x::Complex256, y::Complex256)
111-
ccall(($(string(fC,:_q)),:libfloat128), Complex256, (Complex256, Complex256), x, y)
112+
ccall(($(string(fC,:_q)),libquadmath_wrapper), Complex256, (Complex256, Complex256), x, y)
112113
end
113114

114115
#Unsigned Integer
115116
function ($fJ)(x::Complex256, y::CulongMax)
116-
ccall(($(string(fC,:_qui)),:libfloat128), Complex256, (Complex256, Culong), x, y)
117+
ccall(($(string(fC,:_qui)),libquadmath_wrapper), Complex256, (Complex256, Culong), x, y)
117118
end
118119

119120
function ($fJ)(x::CulongMax, y::Complex256)
120-
ccall(($(string(fC,:_uiq)),:libfloat128), Complex256, (Culong, Complex256), x, y)
121+
ccall(($(string(fC,:_uiq)),libquadmath_wrapper), Complex256, (Culong, Complex256), x, y)
121122
end
122123

123124
#Signed Integer
124125
function ($fJ)(x::Complex256, y::ClongMax)
125-
ccall(($(string(fC,:_qsi)),:libfloat128), Complex256, (Complex256, Clong), x, y)
126+
ccall(($(string(fC,:_qsi)),libquadmath_wrapper), Complex256, (Complex256, Clong), x, y)
126127
end
127128

128129
function ($fJ)(x::ClongMax, y::Complex256)
129-
ccall(($(string(fC,:_siq)),:libfloat128), Complex256, (Clong, Complex256), x, y)
130+
ccall(($(string(fC,:_siq)),libquadmath_wrapper), Complex256, (Clong, Complex256), x, y)
130131
end
131132

132133
# Float32, Float64
133134
function ($fJ)(x::Complex256, y::CdoubleMax)
134-
ccall(($(string(fC,:_qd)),:libfloat128), Complex256, (Complex256, Cdouble), x, y)
135+
ccall(($(string(fC,:_qd)),libquadmath_wrapper), Complex256, (Complex256, Cdouble), x, y)
135136
end
136137

137138
function ($fJ)(x::CdoubleMax, y::Complex256,)
138-
ccall(($(string(fC,:_dq)),:libfloat128), Complex256, (Cdouble, Complex256), x, y)
139+
ccall(($(string(fC,:_dq)),libquadmath_wrapper), Complex256, (Cdouble, Complex256), x, y)
139140
end
140141

141142
# Float128
142143
function ($fJ)(x::Complex256, y::Float128)
143-
ccall(($(string(fC,:_qD)),:libfloat128), Complex256, (Complex256, Float128), x, y)
144+
ccall(($(string(fC,:_qD)),libquadmath_wrapper), Complex256, (Complex256, Float128), x, y)
144145
end
145146

146147
function ($fJ)(x::Float128, y::Complex256,)
147-
ccall(($(string(fC,:_Dq)),:libfloat128), Complex256, (Float128, Complex256), x, y)
148+
ccall(($(string(fC,:_Dq)),libquadmath_wrapper), Complex256, (Float128, Complex256), x, y)
148149
end
149150

150151
end
@@ -158,58 +159,58 @@ for (fJ, fC) in ((:<,:less), (:<=,:less_equal), (:(==),:equal), (:>=,:greater_eq
158159
@eval begin
159160
#Float128
160161
function ($fJ)(x::Float128, y::Float128)
161-
ccall(($(string(fC,:_q)),:libfloat128), Cint, (Float128, Float128), x, y) != 0
162+
ccall(($(string(fC,:_q)),libquadmath_wrapper), Cint, (Float128, Float128), x, y) != 0
162163
end
163164

164165
#Unsigned Integer
165166
function ($fJ)(x::Float128, y::CulongMax)
166-
ccall(($(string(fC,:_qui)),:libfloat128), Cint, (Float128, Culong), x, y) != 0
167+
ccall(($(string(fC,:_qui)),libquadmath_wrapper), Cint, (Float128, Culong), x, y) != 0
167168
end
168169

169170
function ($fJ)(x::CulongMax, y::Float128)
170-
ccall(($(string(fC,:_uiq)),:libfloat128), Cint, (Culong, Float128), x, y) != 0
171+
ccall(($(string(fC,:_uiq)),libquadmath_wrapper), Cint, (Culong, Float128), x, y) != 0
171172
end
172173

173174
#Signed Integer
174175
function ($fJ)(x::Float128, y::ClongMax)
175-
ccall(($(string(fC,:_qsi)),:libfloat128), Cint, (Float128, Clong), x, y) != 0
176+
ccall(($(string(fC,:_qsi)),libquadmath_wrapper), Cint, (Float128, Clong), x, y) != 0
176177
end
177178

178179
function ($fJ)(x::ClongMax, y::Float128)
179-
ccall(($(string(fC,:_siq)),:libfloat128), Cint, (Clong, Float128), x, y) != 0
180+
ccall(($(string(fC,:_siq)),libquadmath_wrapper), Cint, (Clong, Float128), x, y) != 0
180181
end
181182

182183
# Float32, Float64
183184
function ($fJ)(x::Float128, y::CdoubleMax)
184-
ccall(($(string(fC,:_qd)),:libfloat128), Cint, (Float128, Cdouble), x, y) != 0
185+
ccall(($(string(fC,:_qd)),libquadmath_wrapper), Cint, (Float128, Cdouble), x, y) != 0
185186
end
186187

187188
function ($fJ)(x::CdoubleMax, y::Float128,)
188-
ccall(($(string(fC,:_dq)),:libfloat128), Cint, (Cdouble, Float128), x, y) != 0
189+
ccall(($(string(fC,:_dq)),libquadmath_wrapper), Cint, (Cdouble, Float128), x, y) != 0
189190
end
190191
end
191192
end
192193

193194

194195
function fma(x::Float128, y::Float128, z::Float128)
195-
ccall(("fma_q",:libfloat128), Float128, (Float128, Float128, Float128, ), x, y, z)
196+
ccall(("fma_q",libquadmath_wrapper), Float128, (Float128, Float128, Float128, ), x, y, z)
196197
end
197198

198199

199200
function -(x::Float128)
200-
ccall((:neg_q, :libfloat128), Float128, (Float128,), x)
201+
ccall((:neg_q, libquadmath_wrapper), Float128, (Float128,), x)
201202
end
202203

203204
function ^(x::Float128, y::Float128)
204-
ccall((:pow_q, :libfloat128), Float128, (Float128, Float128,), x, y)
205+
ccall((:pow_q, libquadmath_wrapper), Float128, (Float128, Float128,), x, y)
205206
end
206207

207208
# constants
208-
eps(::Type{Float128}) = ccall(("eps_q", :libfloat128), Float128, (), )
209-
realmin(::Type{Float128}) = ccall(("realmin_q", :libfloat128), Float128, (), )
210-
realmax(::Type{Float128}) = ccall(("realmax_q", :libfloat128), Float128, (), )
211-
convert(::Type{Float128}, ::Irrational{:π}) = ccall(("pi_q", :libfloat128), Float128, (), )
212-
convert(::Type{Float128}, ::Irrational{:e}) = ccall(("e_q", :libfloat128), Float128, (), )
209+
eps(::Type{Float128}) = ccall(("eps_q", libquadmath_wrapper), Float128, (), )
210+
realmin(::Type{Float128}) = ccall(("realmin_q", libquadmath_wrapper), Float128, (), )
211+
realmax(::Type{Float128}) = ccall(("realmax_q", libquadmath_wrapper), Float128, (), )
212+
convert(::Type{Float128}, ::Irrational{:π}) = ccall(("pi_q", libquadmath_wrapper), Float128, (), )
213+
convert(::Type{Float128}, ::Irrational{:e}) = ccall(("e_q", libquadmath_wrapper), Float128, (), )
213214

214215

215216

@@ -219,56 +220,56 @@ for f in (:acos, :acosh, :asin, :asinh, :atan, :atanh, :cosh, :cos,
219220
:tan, :tanh, :besselj0, :besselj1, :bessely0, :bessely1, :abs,
220221
:ceil, :floor, :trunc, :round, :gamma, :lgamma, )
221222
@eval function $f(x::Float128)
222-
ccall(($(string(f,:_q)), :libfloat128), Float128, (Float128, ), x)
223+
ccall(($(string(f,:_q)), libquadmath_wrapper), Float128, (Float128, ), x)
223224
end
224225
end
225226

226227
for f in (:atan2, :copysign, :max, :min, :hypot,)
227228
@eval function $f(x::Float128, y::Float128)
228-
ccall(($(string(f,:_q)), :libfloat128), Float128, (Float128, Float128), x, y)
229+
ccall(($(string(f,:_q)), libquadmath_wrapper), Float128, (Float128, Float128), x, y)
229230
end
230231
end
231232

232233
for f in (:besselj, :bessely,)
233234
@eval function $f(n::Integer, x::Float128)
234-
ccall(($(string(f,:_q)), :libfloat128), Float128, (Cint, Float128), n, x)
235+
ccall(($(string(f,:_q)), libquadmath_wrapper), Float128, (Cint, Float128), n, x)
235236
end
236237
end
237238

238239
function -(x::Complex256)
239-
ccall((:cneg_q, :libfloat128), Complex256, (Complex256,), x)
240+
ccall((:cneg_q, libquadmath_wrapper), Complex256, (Complex256,), x)
240241
end
241242

242243
function ^(x::Complex256, y::Complex256)
243-
ccall((:cpow_q, :libfloat128), Complex256, (Complex256, Complex256,), x, y)
244+
ccall((:cpow_q, libquadmath_wrapper), Complex256, (Complex256, Complex256,), x, y)
244245
end
245246

246247
# unary complex functions
247248
for f in (:acos, :acosh, :asin, :asinh, :atan, :atanh, :cosh, :cos,
248249
:exp, :log, :log10, :conj, :sin, :sinh, :sqrt,
249250
:tan, :tanh, )
250251
@eval function $f(x::Complex256)
251-
ccall(($(string(:c,f,:_q)), :libfloat128), Complex256, (Complex256, ), x)
252+
ccall(($(string(:c,f,:_q)), libquadmath_wrapper), Complex256, (Complex256, ), x)
252253
end
253254
end
254255

255256
# unary complex functions with real result
256257
for f in (:abs, :imag, :real, :angle )
257258
@eval function $f(x::Float128)
258-
ccall(($(string(:c,f,:_q)), :libfloat128), Float128, (Complex256, ), x)
259+
ccall(($(string(:c,f,:_q)), libquadmath_wrapper), Float128, (Complex256, ), x)
259260
end
260261
end
261262

262263
function cis(x::Float128)
263-
ccall((:ccis_q, :libfloat128), Complex256, (Float128,), x)
264+
ccall((:ccis_q, libquadmath_wrapper), Complex256, (Float128,), x)
264265
end
265266

266267

267268

268269
function string(x::Float128)
269270
lng = 64
270271
buf = Array(UInt8, lng + 1)
271-
lng = ccall((:stringq,:libfloat128), Int32, (Ptr{UInt8}, Culong, Ptr{UInt8}, Float128,), buf, lng + 1, "%.35Qe", x)
272+
lng = ccall((:stringq,libquadmath_wrapper), Int32, (Ptr{UInt8}, Culong, Ptr{UInt8}, Float128,), buf, lng + 1, "%.35Qe", x)
272273
return bytestring(pointer(buf), lng)
273274
end
274275

@@ -280,12 +281,12 @@ const ROUNDING_MODE = Cint[0]
280281

281282
function convert(::Type{BigFloat}, x::Float128)
282283
z = BigFloat()
283-
res = ccall((:mpfr_set_float128_xxx, :libfloat128), Int32, (Ptr{BigFloat}, Float128, Int32), &z, x, ROUNDING_MODE[end])
284+
res = ccall((:mpfr_set_float128_xxx, libquadmath_wrapper), Int32, (Ptr{BigFloat}, Float128, Int32), &z, x, ROUNDING_MODE[end])
284285
return z
285286
end
286287

287288
convert(::Type{Float128}, x::BigFloat) =
288-
ccall((:mpfr_get_float128_xxx, :libfloat128), Float128, (Ptr{BigFloat},Int32), &x, ROUNDING_MODE[end])
289+
ccall((:mpfr_get_float128_xxx, libquadmath_wrapper), Float128, (Ptr{BigFloat},Int32), &x, ROUNDING_MODE[end])
289290

290291

291292
end

0 commit comments

Comments
 (0)