Skip to content

Commit

Permalink
Simplify chunk_t type to uint64_t with memcpy calls.
Browse files Browse the repository at this point in the history
  • Loading branch information
nmoinvaz committed Feb 1, 2022
1 parent 9146bd4 commit f414727
Showing 1 changed file with 3 additions and 31 deletions.
34 changes: 3 additions & 31 deletions chunkset.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,7 @@

#include "zbuild.h"

/* Define 8 byte chunks differently depending on unaligned support */
#if defined(UNALIGNED64_OK)
typedef uint64_t chunk_t;
#elif defined(UNALIGNED_OK)
typedef struct chunk_t { uint32_t u32[2]; } chunk_t;
#else
typedef struct chunk_t { uint8_t u8[8]; } chunk_t;
#endif

#define CHUNK_SIZE 8

Expand All @@ -20,38 +13,17 @@ typedef struct chunk_t { uint8_t u8[8]; } chunk_t;
#define HAVE_CHUNKMEMSET_8

static inline void chunkmemset_1(uint8_t *from, chunk_t *chunk) {
#if defined(UNALIGNED64_OK)
*chunk = 0x0101010101010101 * (uint8_t)*from;
#elif defined(UNALIGNED_OK)
chunk->u32[0] = 0x01010101 * (uint8_t)*from;
chunk->u32[1] = chunk->u32[0];
#else
memset(chunk, *from, sizeof(chunk_t));
#endif
}

static inline void chunkmemset_4(uint8_t *from, chunk_t *chunk) {
#if defined(UNALIGNED64_OK)
uint32_t half_chunk;
memcpy(&half_chunk, from, sizeof(half_chunk));
*chunk = 0x0000000100000001 * (uint64_t)half_chunk;
#elif defined(UNALIGNED_OK)
memcpy(&chunk->u32[0], from, sizeof(chunk->u32[0]));
chunk->u32[1] = chunk->u32[0];
#else
uint8_t *chunkptr = (uint8_t *)chunk;
memcpy(chunkptr, from, sizeof(uint32_t));
memcpy(chunkptr+4, from, sizeof(uint32_t));
#endif
uint8_t *dest = (uint8_t *)chunk;
memcpy(dest, from, sizeof(uint32_t));
memcpy(dest+4, from, sizeof(uint32_t));
}

static inline void chunkmemset_8(uint8_t *from, chunk_t *chunk) {
#if defined(UNALIGNED_OK) && !defined(UNALIGNED64_OK)
memcpy(&chunk->u32[0], from, sizeof(chunk->u32[0]));
memcpy(&chunk->u32[1], from+4, sizeof(chunk->u32[1]));
#else
memcpy(chunk, from, sizeof(uint64_t));
#endif
}

static inline void loadchunk(uint8_t const *s, chunk_t *chunk) {
Expand Down

0 comments on commit f414727

Please sign in to comment.