feat(third_party/bazel): Check in rules_haskell from Tweag
This commit is contained in:
parent
2eb1dc26e4
commit
f723b8b878
479 changed files with 51484 additions and 0 deletions
56
third_party/bazel/rules_haskell/examples/primitive/cbits/primitive-memops.c
vendored
Normal file
56
third_party/bazel/rules_haskell/examples/primitive/cbits/primitive-memops.c
vendored
Normal file
|
@ -0,0 +1,56 @@
|
|||
#include <string.h>
|
||||
#include "primitive-memops.h"
|
||||
|
||||
void hsprimitive_memcpy( void *dst, ptrdiff_t doff, void *src, ptrdiff_t soff, size_t len )
|
||||
{
|
||||
memcpy( (char *)dst + doff, (char *)src + soff, len );
|
||||
}
|
||||
|
||||
void hsprimitive_memmove( void *dst, ptrdiff_t doff, void *src, ptrdiff_t soff, size_t len )
|
||||
{
|
||||
memmove( (char *)dst + doff, (char *)src + soff, len );
|
||||
}
|
||||
|
||||
#define MEMSET(TYPE, ATYPE) \
|
||||
void hsprimitive_memset_ ## TYPE (Hs ## TYPE *p, ptrdiff_t off, size_t n, ATYPE x) \
|
||||
{ \
|
||||
p += off; \
|
||||
if (x == 0) \
|
||||
memset(p, 0, n * sizeof(Hs ## TYPE)); \
|
||||
else if (sizeof(Hs ## TYPE) == sizeof(int)*2) { \
|
||||
int *q = (int *)p; \
|
||||
const int *r = (const int *)(void *)&x; \
|
||||
while (n>0) { \
|
||||
q[0] = r[0]; \
|
||||
q[1] = r[1]; \
|
||||
q += 2; \
|
||||
--n; \
|
||||
} \
|
||||
} \
|
||||
else { \
|
||||
while (n>0) { \
|
||||
*p++ = x; \
|
||||
--n; \
|
||||
} \
|
||||
} \
|
||||
}
|
||||
|
||||
int hsprimitive_memcmp( HsWord8 *s1, HsWord8 *s2, size_t n )
|
||||
{
|
||||
return memcmp( s1, s2, n );
|
||||
}
|
||||
|
||||
void hsprimitive_memset_Word8 (HsWord8 *p, ptrdiff_t off, size_t n, HsWord x)
|
||||
{
|
||||
memset( (char *)(p+off), x, n );
|
||||
}
|
||||
|
||||
/* MEMSET(HsWord8, HsWord) */
|
||||
MEMSET(Word16, HsWord)
|
||||
MEMSET(Word32, HsWord)
|
||||
MEMSET(Word64, HsWord64)
|
||||
MEMSET(Word, HsWord)
|
||||
MEMSET(Ptr, HsPtr)
|
||||
MEMSET(Float, HsFloat)
|
||||
MEMSET(Double, HsDouble)
|
||||
MEMSET(Char, HsChar)
|
Loading…
Add table
Add a link
Reference in a new issue