blob: 167a1611186441052d687a25bec16ef0a8914a67 [file] [log] [blame]
// We need separate THC_STATE from LIBRARY_STATE because this is called for copy functions.
// Copy functions have a THCState if either the source or destination are GPU types,
// but expand functions don't have this property. So, if we have a source CPU type
// and destination GPU type, we will have a THCState but shouldn't pass it to the expand
// function.
#define IMPLEMENT_NEWFOREXPAND(TYPEC, THC_STATE_NOARGS) \
template<> \
TH##TYPEC##Tensor *newForExpand(LIBRARY_STATE_TYPE_NOARGS) { \
return TH##TYPEC##Tensor_new(THC_STATE_NOARGS); \
}
IMPLEMENT_NEWFOREXPAND(Byte,)
IMPLEMENT_NEWFOREXPAND(Char,)
IMPLEMENT_NEWFOREXPAND(Short,)
IMPLEMENT_NEWFOREXPAND(Int,)
IMPLEMENT_NEWFOREXPAND(Long,)
IMPLEMENT_NEWFOREXPAND(Float,)
IMPLEMENT_NEWFOREXPAND(Double,)
IMPLEMENT_NEWFOREXPAND(Half,)
#ifdef CUDA_EXPAND
IMPLEMENT_NEWFOREXPAND(CudaByte, LIBRARY_STATE_NOARGS)
IMPLEMENT_NEWFOREXPAND(CudaChar, LIBRARY_STATE_NOARGS)
IMPLEMENT_NEWFOREXPAND(CudaShort, LIBRARY_STATE_NOARGS)
IMPLEMENT_NEWFOREXPAND(CudaInt, LIBRARY_STATE_NOARGS)
IMPLEMENT_NEWFOREXPAND(CudaLong, LIBRARY_STATE_NOARGS)
IMPLEMENT_NEWFOREXPAND(Cuda, LIBRARY_STATE_NOARGS)
IMPLEMENT_NEWFOREXPAND(CudaDouble, LIBRARY_STATE_NOARGS)
#ifdef CUDA_HALF_TENSOR
IMPLEMENT_NEWFOREXPAND(CudaHalf, LIBRARY_STATE_NOARGS)
#endif
#endif
#undef IMPLEMENT_NEWFOREXPAND
#define IMPLEMENT_EXPAND(TYPEC, THC_STATE) \
template<> \
void expand(LIBRARY_STATE_TYPE TH##TYPEC##Tensor *r, TH##TYPEC##Tensor *tensor, \
THLongStorage *sizes) { \
TH##TYPEC##Tensor_expand(THC_STATE r, tensor, sizes); \
}
IMPLEMENT_EXPAND(Byte,)
IMPLEMENT_EXPAND(Char,)
IMPLEMENT_EXPAND(Short,)
IMPLEMENT_EXPAND(Int,)
IMPLEMENT_EXPAND(Long,)
IMPLEMENT_EXPAND(Float,)
IMPLEMENT_EXPAND(Double,)
IMPLEMENT_EXPAND(Half,)
#ifdef CUDA_EXPAND
IMPLEMENT_EXPAND(CudaByte, LIBRARY_STATE)
IMPLEMENT_EXPAND(CudaChar, LIBRARY_STATE)
IMPLEMENT_EXPAND(CudaShort, LIBRARY_STATE)
IMPLEMENT_EXPAND(CudaInt, LIBRARY_STATE)
IMPLEMENT_EXPAND(CudaLong, LIBRARY_STATE)
IMPLEMENT_EXPAND(Cuda, LIBRARY_STATE)
IMPLEMENT_EXPAND(CudaDouble, LIBRARY_STATE)
#ifdef CUDA_HALF_TENSOR
IMPLEMENT_EXPAND(CudaHalf, LIBRARY_STATE)
#endif
#endif
#undef IMPLEMENT_EXPAND