Skip to content

Commit 75db8e8

Browse files
committed
fix
1 parent 9e6f24b commit 75db8e8

1 file changed

Lines changed: 22 additions & 16 deletions

File tree

src/typeutils/recursive_add.jl

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -50,24 +50,30 @@ end
5050
@inline mutable_register(::Type{T}) where {T<:Array} = true
5151
@inline mutable_register(::Type{T}) where {T} = ismutabletype(T)
5252

53-
@inline function atomicrmw_add!(ptr::Ptr{Float64}, val::Float64)
54-
Base.llvmcall(
55-
"atomicrmw fadd double* %0, double %1 monotonic\nret void",
56-
Cvoid,
57-
Tuple{Ptr{Float64}, Float64},
58-
ptr,
59-
val
60-
)
53+
@generated function atomicrmw_add!(ptr::Ptr{Float64}, val::Float64)
54+
ptr_type = (Int == Int64) ? "i64" : "i32"
55+
ir = """
56+
%ptr = inttoptr $ptr_type %0 to double*
57+
atomicrmw fadd double* %ptr, double %1 monotonic
58+
ret void
59+
"""
60+
return quote
61+
Base.@_inline_meta
62+
Base.llvmcall($ir, Cvoid, Tuple{Ptr{Float64}, Float64}, ptr, val)
63+
end
6164
end
6265

63-
@inline function atomicrmw_add!(ptr::Ptr{Float32}, val::Float32)
64-
Base.llvmcall(
65-
"atomicrmw fadd float* %0, float %1 monotonic\nret void",
66-
Cvoid,
67-
Tuple{Ptr{Float32}, Float32},
68-
ptr,
69-
val
70-
)
66+
@generated function atomicrmw_add!(ptr::Ptr{Float32}, val::Float32)
67+
ptr_type = (Int == Int64) ? "i64" : "i32"
68+
ir = """
69+
%ptr = inttoptr $ptr_type %0 to float*
70+
atomicrmw fadd float* %ptr, float %1 monotonic
71+
ret void
72+
"""
73+
return quote
74+
Base.@_inline_meta
75+
Base.llvmcall($ir, Cvoid, Tuple{Ptr{Float32}, Float32}, ptr, val)
76+
end
7177
end
7278

7379

0 commit comments

Comments
 (0)