summaryrefslogtreecommitdiff
path: root/raid6.c
diff options
context:
space:
mode:
Diffstat (limited to 'raid6.c')
-rw-r--r--raid6.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/raid6.c b/raid6.c
index a6ee483f..833df5f3 100644
--- a/raid6.c
+++ b/raid6.c
@@ -11,6 +11,10 @@
* ----------------------------------------------------------------------- */
/*
+ * Added helpers for unaligned native int access
+ */
+
+/*
* raid6int1.c
*
* 1-way unrolled portable integer math RAID-6 instruction set
@@ -33,11 +37,15 @@
# define NSIZE 8
# define NSHIFT 3
typedef uint64_t unative_t;
+#define put_unaligned_native(val,p) put_unaligned_64((val),(p))
+#define get_unaligned_native(p) get_unaligned_64((p))
#else
# define NBYTES(x) ((x) * 0x01010101U)
# define NSIZE 4
# define NSHIFT 2
typedef uint32_t unative_t;
+#define put_unaligned_native(val,p) put_unaligned_32((val),(p))
+#define get_unaligned_native(p) get_unaligned_32((p))
#endif
/*
@@ -84,9 +92,9 @@ void raid6_gen_syndrome(int disks, size_t bytes, void **ptrs)
q = dptr[z0+2]; /* RS syndrome */
for ( d = 0 ; d < bytes ; d += NSIZE*1 ) {
- wq0 = wp0 = *(unative_t *)&dptr[z0][d+0*NSIZE];
+ wq0 = wp0 = get_unaligned_native(&dptr[z0][d+0*NSIZE]);
for ( z = z0-1 ; z >= 0 ; z-- ) {
- wd0 = *(unative_t *)&dptr[z][d+0*NSIZE];
+ wd0 = get_unaligned_native(&dptr[z][d+0*NSIZE]);
wp0 ^= wd0;
w20 = MASK(wq0);
w10 = SHLBYTE(wq0);
@@ -94,8 +102,8 @@ void raid6_gen_syndrome(int disks, size_t bytes, void **ptrs)
w10 ^= w20;
wq0 = w10 ^ wd0;
}
- *(unative_t *)&p[d+NSIZE*0] = wp0;
- *(unative_t *)&q[d+NSIZE*0] = wq0;
+ put_unaligned_native(wp0, &p[d+NSIZE*0]);
+ put_unaligned_native(wq0, &q[d+NSIZE*0]);
}
}