X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fincludes%2FUpdates.h;h=68241d75089e586595e20c018f75a47633a10c81;hb=9aebe874248bc1d7700df3fb793a7cd0223bfb20;hp=208c9f00d11527275328587abdbbbaa686e72176;hpb=423d477bfecd490de1449c59325c8776f91d7aac;p=ghc-hetmet.git diff --git a/ghc/includes/Updates.h b/ghc/includes/Updates.h index 208c9f0..68241d7 100644 --- a/ghc/includes/Updates.h +++ b/ghc/includes/Updates.h @@ -40,11 +40,15 @@ * impedence matching: */ #ifdef CMINUSMINUS +#define BLOCK_BEGIN +#define BLOCK_END #define DECLARE_IPTR(info) W_ info #define FCALL foreign "C" #define INFO_PTR(info) info #define ARG_PTR "ptr" #else +#define BLOCK_BEGIN { +#define BLOCK_END } #define DECLARE_IPTR(info) const StgInfoTable *(info) #define FCALL /* nothing */ #define INFO_PTR(info) &info @@ -56,43 +60,51 @@ /* UPD_IND actually does a PERM_IND if TICKY_TICKY is on; if you *really* need an IND use UPD_REAL_IND */ -#define UPD_REAL_IND(updclosure, ind_info, heapptr, and_then) \ - DECLARE_IPTR(info); \ - info = GET_INFO(updclosure); \ - AWAKEN_BQ(info,updclosure); \ - updateWithIndirection(GET_INFO(updclosure), ind_info, \ - updclosure, \ - heapptr, \ - and_then); +#define UPD_REAL_IND(updclosure, ind_info, heapptr, and_then) \ + BLOCK_BEGIN \ + DECLARE_IPTR(info); \ + info = GET_INFO(updclosure); \ + AWAKEN_BQ(info,updclosure); \ + updateWithIndirection(GET_INFO(updclosure), ind_info, \ + updclosure, \ + heapptr, \ + and_then); \ + BLOCK_END #if defined(PROFILING) || defined(TICKY_TICKY) #define UPD_PERM_IND(updclosure, heapptr) \ + BLOCK_BEGIN \ DECLARE_IPTR(info); \ info = GET_INFO(updclosure); \ AWAKEN_BQ(info,updclosure); \ updateWithPermIndirection(info, \ updclosure, \ - heapptr); + heapptr); \ + BLOCK_END #endif #if defined(RTS_SUPPORTS_THREADS) # ifdef TICKY_TICKY # define UPD_IND_NOLOCK(updclosure, heapptr) \ + BLOCK_BEGIN \ DECLARE_IPTR(info); \ info = GET_INFO(updclosure); \ AWAKEN_BQ_NOLOCK(info,updclosure); \ updateWithPermIndirection(info, \ updclosure, \ - heapptr) + heapptr); \ + BLOCK_END # else -# define UPD_IND_NOLOCK(updclosure, heapptr) \ - DECLARE_IPTR(info); \ - info = GET_INFO(updclosure); \ - AWAKEN_BQ_NOLOCK(info,updclosure); \ - updateWithIndirection(info,stg_IND_info, \ - updclosure, \ - heapptr,); +# define UPD_IND_NOLOCK(updclosure, heapptr) \ + BLOCK_BEGIN \ + DECLARE_IPTR(info); \ + info = GET_INFO(updclosure); \ + AWAKEN_BQ_NOLOCK(info,updclosure); \ + updateWithIndirection(info, INFO_PTR(stg_IND_info), \ + updclosure, \ + heapptr,); \ + BLOCK_END # endif #else