Go to file
Frediano Ziglio 74e50b57ae Make the compiler work out better way to write unaligned memory
Instead of assuming that the system can safely do unaligned access
to memory use packed structures to allow the compiler generate
best code possible.
A packed structure tells the compiler to not leave padding inside it
and that the structure can be unaligned so any field can be unaligned
having to generate proper access code based on architecture.
For instance ARM7 can use unaligned access but not for 64 bit
numbers (currently these accesses are emulated by Linux kernel
with obvious performance consequences).

This changes the current methods from:

#ifdef WORDS_BIGENDIAN
#define read_uint32(ptr) ((uint32_t)SPICE_BYTESWAP32(*((uint32_t *)(ptr))))
#define write_uint32(ptr, val) *(uint32_t *)(ptr) = SPICE_BYTESWAP32((uint32_t)val)
#else
#define read_uint32(ptr) (*((uint32_t *)(ptr)))
#define write_uint32(ptr, val) (*((uint32_t *)(ptr))) = val
#endif

to:

#include <spice/start-packed.h>
typedef struct SPICE_ATTR_PACKED {
    uint32_t v;
} uint32_unaligned_t;
#include <spice/end-packed.h>

#ifdef WORDS_BIGENDIAN
#define read_uint32(ptr) ((uint32_t)SPICE_BYTESWAP32(((uint32_unaligned_t *)(ptr))->v))
#define write_uint32(ptr, val) ((uint32_unaligned_t *)(ptr))->v = SPICE_BYTESWAP32((uint32_t)val)
#else
#define read_uint32(ptr) (((uint32_unaligned_t *)(ptr))->v)
#define write_uint32(ptr, val) (((uint32_unaligned_t *)(ptr))->v) = val
#endif

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Christophe Fergeau <cfergeau@redhat.com>
2017-09-25 16:12:45 +01:00
build-aux build-sys: make it a seperately buildable spice-common library 2012-03-22 20:21:05 +01:00
common Make the compiler work out better way to write unaligned memory 2017-09-25 16:12:45 +01:00
docs build-sys: don't dist spice-protocol.html 2017-03-28 14:57:50 +02:00
m4 spice-deps: Set python version based on modules availability 2016-11-29 11:43:25 +01:00
python_modules Make the compiler work out better way to write unaligned memory 2017-09-25 16:12:45 +01:00
tests log: Forbid the usage of obsolete SPICE_LOG_DOMAIN 2017-07-05 09:53:02 +01:00
.gitmodules Remove spice-protocol submodule 2015-08-11 10:26:06 +02:00
autogen.sh Remove files moved to spice-protocol 2015-08-11 10:26:06 +02:00
configure.ac log: Define G_LOG_DOMAIN as early as possible 2017-07-07 17:04:36 +02:00
COPYING Remove trailing whitespace 2015-12-18 11:41:15 +01:00
git.mk Update git.mk to latest version 2012-09-21 10:51:17 +02:00
Makefile.am Start adding protocol file documentation 2016-10-17 11:43:26 +01:00
spice1.proto Revert "Remove files moved to spice-protocol" 2016-03-10 16:01:36 +01:00
spice_codegen.py codegen: Fix license name 2017-05-18 16:40:36 +01:00
spice.proto protocol: Add support for VP9 video codec 2017-01-31 08:51:33 +00:00