diff --git a/loopy/target/ispc.py b/loopy/target/ispc.py
index b9e654c9f173ce0028f9a793dd7f3cdc4f3b4fdc..4fcccf8ab7c938b13a6fa76253010f80a7465520 100644
--- a/loopy/target/ispc.py
+++ b/loopy/target/ispc.py
@@ -30,18 +30,24 @@ from loopy.target.c import CTarget
 from loopy.target.c.codegen.expression import LoopyCCodeMapper
 from loopy.diagnostic import LoopyError
 
-from pymbolic import var
-
 
 # {{{ expression mapper
 
 class LoopyISPCCodeMapper(LoopyCCodeMapper):
+    def _get_index_ctype(self):
+        if self.kernel.index_dtype == np.int32:
+            return "int32"
+        elif self.kernel.index_dtype == np.int64:
+            return "int64"
+        else:
+            raise ValueError("unexpected index_type")
+
     def map_group_hw_index(self, expr, enclosing_prec, type_context):
-        return "taskIndex%d" % expr.axis
+        return "((%s) taskIndex%d)" % (self._get_index_ctype(), expr.axis)
 
     def map_local_hw_index(self, expr, enclosing_prec, type_context):
         if expr.axis == 0:
-            return var("programIndex")
+            return "(varying %s) programIndex" % self._get_index_ctype()
         else:
             raise LoopyError("ISPC only supports one local axis")