| Index: sim/v850/simops.c
|
| diff --git a/sim/v850/simops.c b/sim/v850/simops.c
|
| index f7fc67d8daecafa09bb4e3b869e532fc7ba09161..da6da592c6fb5ef701d23149558ea7589d3ec608 100644
|
| --- a/sim/v850/simops.c
|
| +++ b/sim/v850/simops.c
|
| @@ -3281,6 +3281,56 @@ void v850_shl(SIM_DESC sd, unsigned int op0, unsigned int op1, unsigned int *op2
|
| *op2p = result;
|
| }
|
|
|
| +void
|
| +v850_rotl (SIM_DESC sd, unsigned int amount, unsigned int src, unsigned int * dest)
|
| +{
|
| + unsigned int result, z, s, cy;
|
| +
|
| + amount &= 0x1f;
|
| + result = src << amount;
|
| + result |= src >> (32 - amount);
|
| +
|
| + /* Compute the condition codes. */
|
| + z = (result == 0);
|
| + s = (result & 0x80000000);
|
| + cy = ! (result & 1);
|
| +
|
| + /* Store the result and condition codes. */
|
| + PSW &= ~(PSW_Z | PSW_S | PSW_OV | PSW_CY);
|
| + PSW |= ((z ? PSW_Z : 0) | (s ? PSW_S : 0)
|
| + | (cy ? PSW_CY : 0));
|
| +
|
| + * dest = result;
|
| +}
|
| +
|
| +void
|
| +v850_bins (SIM_DESC sd, unsigned int source, unsigned int lsb, unsigned int msb,
|
| + unsigned int * dest)
|
| +{
|
| + unsigned int mask;
|
| + unsigned int result, pos, width;
|
| + unsigned int z, s;
|
| +
|
| + pos = lsb;
|
| + width = (msb - lsb) + 1;
|
| +
|
| + mask = ~ (-1 << width);
|
| + source &= mask;
|
| + mask <<= pos;
|
| + result = (* dest) & ~ mask;
|
| + result |= source << pos;
|
| +
|
| + /* Compute the condition codes. */
|
| + z = (result == 0);
|
| + s = result & 0x80000000;
|
| +
|
| + /* Store the result and condition codes. */
|
| + PSW &= ~(PSW_Z | PSW_S | PSW_OV );
|
| + PSW |= (z ? PSW_Z : 0) | (s ? PSW_S : 0);
|
| +
|
| + * dest = result;
|
| +}
|
| +
|
| void v850_shr(SIM_DESC sd, unsigned int op0, unsigned int op1, unsigned int *op2p)
|
| {
|
| unsigned int result, z, s, cy;
|
|
|