This commit is contained in:
parent
aa2ff7b2f0
commit
2f3113f55d
11742 changed files with 1223940 additions and 0 deletions
40
unikernel/duniverse/digestif/src-c/native/misc.c
Normal file
40
unikernel/duniverse/digestif/src-c/native/misc.c
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
#include "digestif.h"
|
||||
|
||||
#define u_long_s sizeof (unsigned long)
|
||||
|
||||
static inline void xor_into (uint8_t *src, uint8_t *dst, size_t n) {
|
||||
#if defined (__digestif_SSE2__)
|
||||
while (n >= 16) {
|
||||
_mm_storeu_si128 (
|
||||
(__m128i*) dst,
|
||||
_mm_xor_si128 (
|
||||
_mm_loadu_si128 ((__m128i*) src),
|
||||
_mm_loadu_si128 ((__m128i*) dst)));
|
||||
src += 16;
|
||||
dst += 16;
|
||||
n -= 16;
|
||||
}
|
||||
#endif
|
||||
while (n >= u_long_s) {
|
||||
*((u_long *) dst) ^= *((u_long *) src);
|
||||
src += u_long_s;
|
||||
dst += u_long_s;
|
||||
n -= u_long_s;
|
||||
}
|
||||
while (n-- > 0) {
|
||||
*dst = *(src ++) ^ *dst;
|
||||
dst++;
|
||||
}
|
||||
}
|
||||
|
||||
CAMLprim value
|
||||
caml_digestif_ba_xor_into (value b1, value off1, value b2, value off2, value n) {
|
||||
xor_into (_ba_uint8_off (b1, off1), _ba_uint8_off (b2, off2), Int_val (n));
|
||||
return Val_unit;
|
||||
}
|
||||
|
||||
CAMLprim value
|
||||
caml_digestif_st_xor_into (value b1, value off1, value b2, value off2, value n) {
|
||||
xor_into (_st_uint8_off (b1, off1), _st_uint8_off (b2, off2), Int_val (n));
|
||||
return Val_unit;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue