Navigation Menu

Skip to content

Commit

Permalink
Do a better job psychoanalyzing POCL's calling convention
Browse files Browse the repository at this point in the history
  • Loading branch information
inducer committed Jul 5, 2015
1 parent f20eeb5 commit 7888a50
Showing 1 changed file with 10 additions and 1 deletion.
11 changes: 10 additions & 1 deletion pyopencl/__init__.py
Expand Up @@ -789,6 +789,8 @@ def kernel_set_scalar_arg_dtypes(self, scalar_arg_dtypes):
else:
warn_about_arg_count_bug = True

fp_arg_count = 0

# }}}

cl_arg_idx = 0
Expand Down Expand Up @@ -832,7 +834,9 @@ def kernel_set_scalar_arg_dtypes(self, scalar_arg_dtypes):
else:
raise TypeError("unexpected complex type: %s" % arg_dtype)

if work_around_arg_count_bug and arg_dtype == np.complex128:
if (work_around_arg_count_bug
and arg_dtype == np.complex128
and fp_arg_count + 2 <= 8):
gen(
"buf = pack('{arg_char}', {arg_var}.real)"
.format(arg_char=arg_char, arg_var=arg_var))
Expand All @@ -851,6 +855,8 @@ def kernel_set_scalar_arg_dtypes(self, scalar_arg_dtypes):
self._generate_buffer_arg_setter(gen, cl_arg_idx, "buf")
cl_arg_idx += 1

fp_arg_count += 2

elif arg_dtype.char in "IL" and _CPY26:
# Prevent SystemError: ../Objects/longobject.c:336: bad
# argument to internal function
Expand All @@ -862,6 +868,9 @@ def kernel_set_scalar_arg_dtypes(self, scalar_arg_dtypes):
cl_arg_idx += 1

else:
if arg_dtype.kind == "f":
fp_arg_count += 1

arg_char = arg_dtype.char
arg_char = _type_char_map.get(arg_char, arg_char)
gen(
Expand Down

0 comments on commit 7888a50

Please sign in to comment.