Make code faster on platforms not supporting unaligned access
by default.
Signed-off-by: Frediano Ziglio <[email protected]>
---
common/canvas_base.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/common/canvas_base.c b/common/canvas_base.c
index 6bf6e5d..36546b3 100644
--- a/common/canvas_base.c
+++ b/common/canvas_base.c
@@ -45,6 +45,14 @@
#include "mem.h"
#include "macros.h"
+#include <spice/start-packed.h>
+typedef struct SPICE_ATTR_PACKED {
+ uint32_t v;
+} uint32_unaligned_t;
+#include <spice/end-packed.h>
+
+#define read_uint32_be(ptr) ntohl(((uint32_unaligned_t *)(ptr))->v)
+
#define ROUND(_x) ((int)floor((_x) + 0.5))
static inline int fix_to_int(SPICE_FIXED28_4 fixed)
@@ -572,7 +580,7 @@ static pixman_image_t *canvas_get_lz4(CanvasBase *canvas,
SpiceImage *image)
do {
// Read next compressed block
- enc_size = ntohl(*SPICE_UNALIGNED_CAST(uint32_t *, data));
+ enc_size = read_uint32_be(data);
data += 4;
dec_size = LZ4_decompress_safe_continue(stream, (const char *) data,
(char *) dest, enc_size,
available);
--
2.17.1
_______________________________________________
Spice-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/spice-devel