• Paul Mackerras's avatar
    powerpc: Make load/store emulation use larger memory accesses · e0a0986b
    Paul Mackerras authored
    At the moment, emulation of loads and stores of up to 8 bytes to
    unaligned addresses on a little-endian system uses a sequence of
    single-byte loads or stores to memory.  This is rather inefficient,
    and the code is hard to follow because it has many ifdefs.
    In addition, the Power ISA has requirements on how unaligned accesses
    are performed, which are not met by doing all accesses as
    sequences of single-byte accesses.
    
    Emulation of VSX loads and stores uses __copy_{to,from}_user,
    which means the emulation code has no control on the size of
    accesses.
    
    To simplify this, we add new copy_mem_in() and copy_mem_out()
    functions for accessing memory.  These use a sequence of the largest
    possible aligned accesses, up to 8 bytes (or 4 on 32-bit systems),
    to copy memory between a local buffer and user memory.  We then
    rewrite {read,write}_mem_unaligned and the VSX load/store
    emulation using these new functions.
    
    These new functions also simplify the code in do_fp_load() and
    do_fp_store() for the unaligned cases.
    Signed-off-by: default avatarPaul Mackerras <paulus@ozlabs.org>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    e0a0986b
sstep.c 59 KB