Skip to content

Commit 53fb762

Browse files
authored
Fix printf on 1.11+ (#789)
1 parent e74b4b4 commit 53fb762

File tree

2 files changed

+196
-193
lines changed

2 files changed

+196
-193
lines changed

src/device/gcn/output.jl

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -131,14 +131,12 @@ function Base.unsafe_load(ptr::LLVMPtr{ROCPrintfBuffer, AS.Global})
131131
args = []
132132
while true
133133
# Read argument type
134-
T_ptr = Ptr{UInt64}(unsafe_load(ptr))
134+
T_id = unsafe_load(ptr)::UInt64
135135
ptr += sizeof(UInt64)
136-
if UInt64(T_ptr) == 0
137-
# Terminator
138-
break
139-
end
140-
T = unsafe_pointer_to_objref(T_ptr)
136+
T_id == 0 && break # Terminator.
137+
141138
# Read argument.
139+
T = _printf_type_from_id(Val(T_id))
142140
arg = unsafe_load(reinterpret(Ptr{T}, ptr))
143141
push!(args, arg)
144142
ptr += sizeof(arg)
@@ -158,12 +156,19 @@ function _rocprintf_fmt(ptr::LLVMPtr{UInt64, AS.Global}, fmt_ptr, fmt_len::Int64
158156
return ptr
159157
end
160158

161-
function _pointer_from_type(::Type{T}) where T
162-
UInt64(pointer_from_objref(T))
159+
for (id, T) in enumerate((
160+
Int16, Int32, Int64,
161+
UInt16, UInt32, UInt64,
162+
Float16, Float32, Float64,
163+
))
164+
@eval @inline _printf_type_id(::Type{$T}) = Val{UInt64($id)}()
165+
@eval @inline _printf_type_from_id(::Val{UInt64($id)}) = $T
163166
end
164167

168+
@inline _from_val(::Val{V}) where V = V
169+
165170
function _rocprintf_arg(ptr::LLVMPtr{UInt64, AS.Global}, arg::T) where T
166-
unsafe_store!(ptr, _pointer_from_type(T))
171+
unsafe_store!(ptr, _from_val(_printf_type_id(T)))
167172
ptr += sizeof(UInt64)
168173

169174
unsafe_store!(reinterpret(LLVMPtr{T, AS.Global}, ptr), arg)

0 commit comments

Comments
 (0)