]> gitweb.factorcode.org Git - factor.git/blobdiff - extra/cuda/ffi/ffi.factor
use radix literals
[factor.git] / extra / cuda / ffi / ffi.factor
index ce6f8cb8b881a8281d7af7142424515b73372293..4a7db0f4741271f29d68e682e4c373cc7ec7ee2f 100644 (file)
@@ -1,6 +1,6 @@
 ! (c)2010 Joe Groff bsd license
-USING: alien alien.c-types alien.libraries alien.syntax
-classes.struct combinators system ;
+USING: accessors alien alien.c-types alien.libraries alien.syntax
+classes.struct combinators kernel system ;
 IN: cuda.ffi
 
 <<
@@ -24,10 +24,23 @@ TYPEDEF: void* CUevent
 TYPEDEF: void* CUstream
 TYPEDEF: void* CUgraphicsResource
 
+! versions of double and longlong that always 8-byte align
+
+SYMBOLS: CUdouble CUlonglong CUulonglong ;
+
+<<
+: always-8-byte-align ( c-type -- c-type )
+    8 >>align 8 >>align-first ;
+
+longlong  lookup-c-type clone always-8-byte-align \ CUlonglong  typedef
+ulonglong lookup-c-type clone always-8-byte-align \ CUulonglong typedef
+double    lookup-c-type clone always-8-byte-align \ CUdouble    typedef
+>>
+
 STRUCT: CUuuid
     { bytes char[16] } ;
 
-C-ENUM: CUctx_flags
+ENUM: CUctx_flags
     { CU_CTX_SCHED_AUTO  0 }
     { CU_CTX_SCHED_SPIN  1 }
     { CU_CTX_SCHED_YIELD 2 }
@@ -35,32 +48,32 @@ C-ENUM: CUctx_flags
     { CU_CTX_BLOCKING_SYNC 4 }
     { CU_CTX_MAP_HOST      8 }
     { CU_CTX_LMEM_RESIZE_TO_MAX 16 }
-    { CU_CTX_FLAGS_MASK  HEX: 1f } ;
+    { CU_CTX_FLAGS_MASK  0x1f } ;
 
-C-ENUM: CUevent_flags
+ENUM: CUevent_flags
     { CU_EVENT_DEFAULT       0 }
     { CU_EVENT_BLOCKING_SYNC 1 } ;
 
-C-ENUM: CUarray_format
-    { CU_AD_FORMAT_UNSIGNED_INT8  HEX: 01 }
-    { CU_AD_FORMAT_UNSIGNED_INT16 HEX: 02 }
-    { CU_AD_FORMAT_UNSIGNED_INT32 HEX: 03 }
-    { CU_AD_FORMAT_SIGNED_INT8    HEX: 08 }
-    { CU_AD_FORMAT_SIGNED_INT16   HEX: 09 }
-    { CU_AD_FORMAT_SIGNED_INT32   HEX: 0a }
-    { CU_AD_FORMAT_HALF           HEX: 10 }
-    { CU_AD_FORMAT_FLOAT          HEX: 20 } ;
-
-C-ENUM: CUaddress_mode
+ENUM: CUarray_format
+    { CU_AD_FORMAT_UNSIGNED_INT8  0x01 }
+    { CU_AD_FORMAT_UNSIGNED_INT16 0x02 }
+    { CU_AD_FORMAT_UNSIGNED_INT32 0x03 }
+    { CU_AD_FORMAT_SIGNED_INT8    0x08 }
+    { CU_AD_FORMAT_SIGNED_INT16   0x09 }
+    { CU_AD_FORMAT_SIGNED_INT32   0x0a }
+    { CU_AD_FORMAT_HALF           0x10 }
+    { CU_AD_FORMAT_FLOAT          0x20 } ;
+
+ENUM: CUaddress_mode
     { CU_TR_ADDRESS_MODE_WRAP   0 }
     { CU_TR_ADDRESS_MODE_CLAMP  1 }
     { CU_TR_ADDRESS_MODE_MIRROR 2 } ;
 
-C-ENUM: CUfilter_mode
+ENUM: CUfilter_mode
     { CU_TR_FILTER_MODE_POINT  0 }
     { CU_TR_FILTER_MODE_LINEAR 1 } ;
 
-C-ENUM: CUdevice_attribute
+ENUM: CUdevice_attribute
     { CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_BLOCK 1 }
     { CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_X 2 }
     { CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Y 3 }
@@ -109,7 +122,7 @@ STRUCT: CUdevprop
     { clockRate int }
     { textureAlign int } ;
 
-C-ENUM: CUfunction_attribute
+ENUM: CUfunction_attribute
     { CU_FUNC_ATTRIBUTE_MAX_THREADS_PER_BLOCK 0 }
     { CU_FUNC_ATTRIBUTE_SHARED_SIZE_BYTES 1     }
     { CU_FUNC_ATTRIBUTE_CONST_SIZE_BYTES 2      }
@@ -119,22 +132,22 @@ C-ENUM: CUfunction_attribute
     { CU_FUNC_ATTRIBUTE_BINARY_VERSION 6        }
     CU_FUNC_ATTRIBUTE_MAX ;
 
-C-ENUM: CUfunc_cache
-    { CU_FUNC_CACHE_PREFER_NONE   HEX: 00 }
-    { CU_FUNC_CACHE_PREFER_SHARED HEX: 01 }
-    { CU_FUNC_CACHE_PREFER_L1     HEX: 02 } ;
+ENUM: CUfunc_cache
+    { CU_FUNC_CACHE_PREFER_NONE   0x00 }
+    { CU_FUNC_CACHE_PREFER_SHARED 0x01 }
+    { CU_FUNC_CACHE_PREFER_L1     0x02 } ;
 
-C-ENUM: CUmemorytype
-    { CU_MEMORYTYPE_HOST   HEX: 01 }
-    { CU_MEMORYTYPE_DEVICE HEX: 02 }
-    { CU_MEMORYTYPE_ARRAY  HEX: 03 } ;
+ENUM: CUmemorytype
+    { CU_MEMORYTYPE_HOST   0x01 }
+    { CU_MEMORYTYPE_DEVICE 0x02 }
+    { CU_MEMORYTYPE_ARRAY  0x03 } ;
 
-C-ENUM: CUcomputemode
+ENUM: CUcomputemode
     { CU_COMPUTEMODE_DEFAULT    0 }
     { CU_COMPUTEMODE_EXCLUSIVE  1 }
     { CU_COMPUTEMODE_PROHIBITED 2 } ;
 
-C-ENUM: CUjit_option
+ENUM: CUjit_option
     { CU_JIT_MAX_REGISTERS 0 }
     CU_JIT_THREADS_PER_BLOCK
     CU_JIT_WALL_TIME
@@ -147,34 +160,34 @@ C-ENUM: CUjit_option
     CU_JIT_TARGET
     CU_JIT_FALLBACK_STRATEGY ;
 
-C-ENUM: CUjit_target
+ENUM: CUjit_target
     { CU_TARGET_COMPUTE_10 0 }
     CU_TARGET_COMPUTE_11
     CU_TARGET_COMPUTE_12
     CU_TARGET_COMPUTE_13
     CU_TARGET_COMPUTE_20 ;
 
-C-ENUM: CUjit_fallback
+ENUM: CUjit_fallback
     { CU_PREFER_PTX 0 }
     CU_PREFER_BINARY ;
 
-C-ENUM: CUgraphicsRegisterFlags
+ENUM: CUgraphicsRegisterFlags
     { CU_GRAPHICS_REGISTER_FLAGS_NONE 0 } ;
 
-C-ENUM: CUgraphicsMapResourceFlags
-    { CU_GRAPHICS_MAP_RESOURCE_FLAGS_NONE          HEX: 00 }
-    { CU_GRAPHICS_MAP_RESOURCE_FLAGS_READ_ONLY     HEX: 01 }
-    { CU_GRAPHICS_MAP_RESOURCE_FLAGS_WRITE_DISCARD HEX: 02 } ;
+ENUM: CUgraphicsMapResourceFlags
+    { CU_GRAPHICS_MAP_RESOURCE_FLAGS_NONE          0x00 }
+    { CU_GRAPHICS_MAP_RESOURCE_FLAGS_READ_ONLY     0x01 }
+    { CU_GRAPHICS_MAP_RESOURCE_FLAGS_WRITE_DISCARD 0x02 } ;
 
-C-ENUM: CUarray_cubemap_face
-    { CU_CUBEMAP_FACE_POSITIVE_X  HEX: 00 }
-    { CU_CUBEMAP_FACE_NEGATIVE_X  HEX: 01 }
-    { CU_CUBEMAP_FACE_POSITIVE_Y  HEX: 02 }
-    { CU_CUBEMAP_FACE_NEGATIVE_Y  HEX: 03 }
-    { CU_CUBEMAP_FACE_POSITIVE_Z  HEX: 04 }
-    { CU_CUBEMAP_FACE_NEGATIVE_Z  HEX: 05 } ;
+ENUM: CUarray_cubemap_face
+    { CU_CUBEMAP_FACE_POSITIVE_X  0x00 }
+    { CU_CUBEMAP_FACE_NEGATIVE_X  0x01 }
+    { CU_CUBEMAP_FACE_POSITIVE_Y  0x02 }
+    { CU_CUBEMAP_FACE_NEGATIVE_Y  0x03 }
+    { CU_CUBEMAP_FACE_POSITIVE_Z  0x04 }
+    { CU_CUBEMAP_FACE_NEGATIVE_Z  0x05 } ;
 
-C-ENUM: CUresult
+ENUM: CUresult
     { CUDA_SUCCESS                    0 }
     { CUDA_ERROR_INVALID_VALUE        1 }
     { CUDA_ERROR_OUT_OF_MEMORY        2 }
@@ -217,9 +230,9 @@ C-ENUM: CUresult
 
     { CUDA_ERROR_UNKNOWN              999 } ;
 
-CONSTANT: CU_MEMHOSTALLOC_PORTABLE        HEX: 01
-CONSTANT: CU_MEMHOSTALLOC_DEVICEMAP       HEX: 02
-CONSTANT: CU_MEMHOSTALLOC_WRITECOMBINED   HEX: 04
+CONSTANT: CU_MEMHOSTALLOC_PORTABLE        0x01
+CONSTANT: CU_MEMHOSTALLOC_DEVICEMAP       0x02
+CONSTANT: CU_MEMHOSTALLOC_WRITECOMBINED   0x04
 
 STRUCT: CUDA_MEMCPY2D
     { srcXInBytes uint }
@@ -280,10 +293,10 @@ STRUCT: CUDA_ARRAY3D_DESCRIPTOR
     { NumChannels uint }
     { Flags uint } ;
 
-CONSTANT: CUDA_ARRAY3D_2DARRAY    HEX: 01
-CONSTANT: CU_TRSA_OVERRIDE_FORMAT HEX: 01
-CONSTANT: CU_TRSF_READ_AS_INTEGER         HEX: 01
-CONSTANT: CU_TRSF_NORMALIZED_COORDINATES  HEX: 02
+CONSTANT: CUDA_ARRAY3D_2DARRAY    0x01
+CONSTANT: CU_TRSA_OVERRIDE_FORMAT 0x01
+CONSTANT: CU_TRSF_READ_AS_INTEGER         0x01
+CONSTANT: CU_TRSF_NORMALIZED_COORDINATES  0x02
 CONSTANT: CU_PARAM_TR_DEFAULT -1
 
 FUNCTION: CUresult cuInit ( uint Flags ) ;
@@ -307,12 +320,12 @@ FUNCTION: CUresult cuCtxPopCurrent ( CUcontext* pctx ) ;
 FUNCTION: CUresult cuCtxGetDevice ( CUdevice* device ) ;
 FUNCTION: CUresult cuCtxSynchronize ( ) ;
 
-FUNCTION: CUresult cuModuleLoad ( CUmodule* module, char* fname ) ;
+FUNCTION: CUresult cuModuleLoad ( CUmodule* module, c-string fname ) ;
 FUNCTION: CUresult cuModuleLoadData ( CUmodule* module, void* image ) ;
 FUNCTION: CUresult cuModuleLoadDataEx ( CUmodule* module, void* image, uint numOptions, CUjit_option* options, void** optionValues ) ;
 FUNCTION: CUresult cuModuleLoadFatBinary ( CUmodule* module, void* fatCubin ) ;
 FUNCTION: CUresult cuModuleUnload ( CUmodule hmod ) ;
-FUNCTION: CUresult cuModuleGetFunction ( CUfunction* hfunc, CUmodule hmod, char* name ) ;
+FUNCTION: CUresult cuModuleGetFunction ( CUfunction* hfunc, CUmodule hmod, c-string name ) ;
 FUNCTION: CUresult cuModuleGetGlobal ( CUdeviceptr* dptr, uint* bytes, CUmodule hmod, char* name ) ;
 FUNCTION: CUresult cuModuleGetTexRef ( CUtexref* pTexRef, CUmodule hmod, char* name ) ;
     
@@ -438,4 +451,3 @@ FUNCTION: CUresult cuGraphicsMapResources ( uint count, CUgraphicsResource* reso
 FUNCTION: CUresult cuGraphicsUnmapResources ( uint count, CUgraphicsResource* resources, CUstream hStream ) ;
 
 FUNCTION: CUresult cuGetExportTable ( void** ppExportTable, CUuuid* pExportTableId ) ;
-