Commit bf8d8ded57a6c54d9ff8a55c35201301ff61ece7
1 parent
e343da72
Add lvs{l,r} instructions.
Signed-off-by: Nathan Froyd <froydnj@codesourcery.com> Signed-off-by: Aurelien Jarno <aurelien@aurel32.net> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6169 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
3 changed files
with
52 additions
and
0 deletions
target-ppc/helper.h
| @@ -150,6 +150,8 @@ DEF_HELPER_3(vslo, void, avr, avr, avr) | @@ -150,6 +150,8 @@ DEF_HELPER_3(vslo, void, avr, avr, avr) | ||
| 150 | DEF_HELPER_3(vsro, void, avr, avr, avr) | 150 | DEF_HELPER_3(vsro, void, avr, avr, avr) |
| 151 | DEF_HELPER_3(vaddcuw, void, avr, avr, avr) | 151 | DEF_HELPER_3(vaddcuw, void, avr, avr, avr) |
| 152 | DEF_HELPER_3(vsubcuw, void, avr, avr, avr) | 152 | DEF_HELPER_3(vsubcuw, void, avr, avr, avr) |
| 153 | +DEF_HELPER_2(lvsl, void, avr, tl); | ||
| 154 | +DEF_HELPER_2(lvsr, void, avr, tl); | ||
| 153 | 155 | ||
| 154 | DEF_HELPER_1(efscfsi, i32, i32) | 156 | DEF_HELPER_1(efscfsi, i32, i32) |
| 155 | DEF_HELPER_1(efscfui, i32, i32) | 157 | DEF_HELPER_1(efscfui, i32, i32) |
target-ppc/op_helper.c
| @@ -1972,6 +1972,24 @@ target_ulong helper_dlmzb (target_ulong high, target_ulong low, uint32_t update_ | @@ -1972,6 +1972,24 @@ target_ulong helper_dlmzb (target_ulong high, target_ulong low, uint32_t update_ | ||
| 1972 | for (index = ARRAY_SIZE(r->element)-1; index >= 0; index--) | 1972 | for (index = ARRAY_SIZE(r->element)-1; index >= 0; index--) |
| 1973 | #endif | 1973 | #endif |
| 1974 | 1974 | ||
| 1975 | +void helper_lvsl (ppc_avr_t *r, target_ulong sh) | ||
| 1976 | +{ | ||
| 1977 | + int i, j = (sh & 0xf); | ||
| 1978 | + | ||
| 1979 | + VECTOR_FOR_INORDER_I (i, u8) { | ||
| 1980 | + r->u8[i] = j++; | ||
| 1981 | + } | ||
| 1982 | +} | ||
| 1983 | + | ||
| 1984 | +void helper_lvsr (ppc_avr_t *r, target_ulong sh) | ||
| 1985 | +{ | ||
| 1986 | + int i, j = 0x10 - (sh & 0xf); | ||
| 1987 | + | ||
| 1988 | + VECTOR_FOR_INORDER_I (i, u8) { | ||
| 1989 | + r->u8[i] = j++; | ||
| 1990 | + } | ||
| 1991 | +} | ||
| 1992 | + | ||
| 1975 | void helper_vaddcuw (ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) | 1993 | void helper_vaddcuw (ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) |
| 1976 | { | 1994 | { |
| 1977 | int i; | 1995 | int i; |
target-ppc/translate.c
| @@ -6146,6 +6146,38 @@ GEN_VR_STX(svx, 0x07, 0x07); | @@ -6146,6 +6146,38 @@ GEN_VR_STX(svx, 0x07, 0x07); | ||
| 6146 | /* As we don't emulate the cache, stvxl is stricly equivalent to stvx */ | 6146 | /* As we don't emulate the cache, stvxl is stricly equivalent to stvx */ |
| 6147 | GEN_VR_STX(svxl, 0x07, 0x0F); | 6147 | GEN_VR_STX(svxl, 0x07, 0x0F); |
| 6148 | 6148 | ||
| 6149 | +GEN_HANDLER(lvsl, 0x1f, 0x06, 0x00, 0x00000001, PPC_ALTIVEC) | ||
| 6150 | +{ | ||
| 6151 | + TCGv_ptr rd; | ||
| 6152 | + TCGv EA; | ||
| 6153 | + if (unlikely(!ctx->altivec_enabled)) { | ||
| 6154 | + gen_exception(ctx, POWERPC_EXCP_VPU); | ||
| 6155 | + return; | ||
| 6156 | + } | ||
| 6157 | + EA = tcg_temp_new(); | ||
| 6158 | + gen_addr_reg_index(ctx, EA); | ||
| 6159 | + rd = gen_avr_ptr(rD(ctx->opcode)); | ||
| 6160 | + gen_helper_lvsl(rd, EA); | ||
| 6161 | + tcg_temp_free(EA); | ||
| 6162 | + tcg_temp_free_ptr(rd); | ||
| 6163 | +} | ||
| 6164 | + | ||
| 6165 | +GEN_HANDLER(lvsr, 0x1f, 0x06, 0x01, 0x00000001, PPC_ALTIVEC) | ||
| 6166 | +{ | ||
| 6167 | + TCGv_ptr rd; | ||
| 6168 | + TCGv EA; | ||
| 6169 | + if (unlikely(!ctx->altivec_enabled)) { | ||
| 6170 | + gen_exception(ctx, POWERPC_EXCP_VPU); | ||
| 6171 | + return; | ||
| 6172 | + } | ||
| 6173 | + EA = tcg_temp_new(); | ||
| 6174 | + gen_addr_reg_index(ctx, EA); | ||
| 6175 | + rd = gen_avr_ptr(rD(ctx->opcode)); | ||
| 6176 | + gen_helper_lvsr(rd, EA); | ||
| 6177 | + tcg_temp_free(EA); | ||
| 6178 | + tcg_temp_free_ptr(rd); | ||
| 6179 | +} | ||
| 6180 | + | ||
| 6149 | /* Logical operations */ | 6181 | /* Logical operations */ |
| 6150 | #define GEN_VX_LOGICAL(name, tcg_op, opc2, opc3) \ | 6182 | #define GEN_VX_LOGICAL(name, tcg_op, opc2, opc3) \ |
| 6151 | GEN_HANDLER(name, 0x04, opc2, opc3, 0x00000000, PPC_ALTIVEC) \ | 6183 | GEN_HANDLER(name, 0x04, opc2, opc3, 0x00000000, PPC_ALTIVEC) \ |