Revision cbfb6ae9 target-ppc/op_helper.c

b/target-ppc/op_helper.c
1999 1999
SATCVT(sd, uw, int64_t, uint32_t, 0, UINT32_MAX, 1, 1)
2000 2000
#undef SATCVT
2001 2001

  
2002
#define LVE(name, access, swap, element)                        \
2003
    void helper_##name (ppc_avr_t *r, target_ulong addr)        \
2004
    {                                                           \
2005
        size_t n_elems = ARRAY_SIZE(r->element);                \
2006
        int adjust = HI_IDX*(n_elems-1);                        \
2007
        int sh = sizeof(r->element[0]) >> 1;                    \
2008
        int index = (addr & 0xf) >> sh;                         \
2009
        if(msr_le) {                                            \
2010
            r->element[LO_IDX ? index : (adjust - index)] = swap(access(addr)); \
2011
        } else {                                                        \
2012
            r->element[LO_IDX ? index : (adjust - index)] = access(addr); \
2013
        }                                                               \
2014
    }
2015
#define I(x) (x)
2016
LVE(lvebx, ldub, I, u8)
2017
LVE(lvehx, lduw, bswap16, u16)
2018
LVE(lvewx, ldl, bswap32, u32)
2019
#undef I
2020
#undef LVE
2021

  
2002 2022
void helper_lvsl (ppc_avr_t *r, target_ulong sh)
2003 2023
{
2004 2024
    int i, j = (sh & 0xf);
......
2017 2037
    }
2018 2038
}
2019 2039

  
2040
#define STVE(name, access, swap, element)                       \
2041
    void helper_##name (ppc_avr_t *r, target_ulong addr)        \
2042
    {                                                           \
2043
        size_t n_elems = ARRAY_SIZE(r->element);                \
2044
        int adjust = HI_IDX*(n_elems-1);                        \
2045
        int sh = sizeof(r->element[0]) >> 1;                    \
2046
        int index = (addr & 0xf) >> sh;                         \
2047
        if(msr_le) {                                            \
2048
            access(addr, swap(r->element[LO_IDX ? index : (adjust - index)])); \
2049
        } else {                                                        \
2050
            access(addr, r->element[LO_IDX ? index : (adjust - index)]); \
2051
        }                                                               \
2052
    }
2053
#define I(x) (x)
2054
STVE(stvebx, stb, I, u8)
2055
STVE(stvehx, stw, bswap16, u16)
2056
STVE(stvewx, stl, bswap32, u32)
2057
#undef I
2058
#undef LVE
2059

  
2020 2060
void helper_vaddcuw (ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
2021 2061
{
2022 2062
    int i;

Also available in: Unified diff