Re: [RFC PATCH 3/4] KVM: emulate: avoid per-byte copying in instruction fetches

From: Paolo Bonzini
Date: Wed May 07 2014 - 04:56:40 EST


Il 07/05/2014 06:36, Bandan Das ha scritto:
> + _x = *(_type __aligned(1) *) &_fc->data[ctxt->_eip - _fc->start]; \
For my own understanding, how does the __aligned help here ?

Except for 16-byte SSE accesses, x86 doesn't distinguish aligned and unaligned accesses. You can read 4 bytes at 0x2345 and the processor will do the right thing. Still it's better to tell the compiler what we're doing.

Wouldn't
that result in unaligned accesses that will actually impact performance ?

These accesses *can* and will in fact be unaligned. For example, say you have "mov ax,0x1234" which is 0xb8 0x34 0x12. When you read it into the fetch cache, you will have data[0] == 0xb8, data[1] == 0x34, data[2] == 0x12. Fetching the 16-bit immediate from data[1] will then be an unaligned access.

Paolo
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/