mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 08:43:55 -06:00
target-ppc: Implement bcdcpsgn. instruction
bcdcpsgn.: Decimal copy sign. Given two registers vra and vrb, it copies the vra value with vrb sign to the result register vrt. Signed-off-by: Jose Ricardo Ziviani <joserz@linux.vnet.ibm.com> Reviewed-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
c85bc7dd90
commit
c3025c3b0a
4 changed files with 28 additions and 1 deletions
|
@ -2920,6 +2920,29 @@ uint32_t helper_bcdctsq(ppc_avr_t *r, ppc_avr_t *b, uint32_t ps)
|
|||
return cr;
|
||||
}
|
||||
|
||||
uint32_t helper_bcdcpsgn(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, uint32_t ps)
|
||||
{
|
||||
int i;
|
||||
int invalid = 0;
|
||||
|
||||
if (bcd_get_sgn(a) == 0 || bcd_get_sgn(b) == 0) {
|
||||
return CRF_SO;
|
||||
}
|
||||
|
||||
*r = *a;
|
||||
bcd_put_digit(r, b->u8[BCD_DIG_BYTE(0)] & 0xF, 0);
|
||||
|
||||
for (i = 1; i < 32; i++) {
|
||||
bcd_get_digit(a, i, &invalid);
|
||||
bcd_get_digit(b, i, &invalid);
|
||||
if (unlikely(invalid)) {
|
||||
return CRF_SO;
|
||||
}
|
||||
}
|
||||
|
||||
return bcd_cmp_zero(r);
|
||||
}
|
||||
|
||||
void helper_vsbox(ppc_avr_t *r, ppc_avr_t *a)
|
||||
{
|
||||
int i;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue