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