Fix for v850e divq instruction
authorJeff Law <jeffreyalaw@gmail.com>
Wed, 6 Apr 2022 15:10:40 +0000 (11:10 -0400)
committerJeff Law <jeffreyalaw@gmail.com>
Wed, 6 Apr 2022 15:10:40 +0000 (11:10 -0400)
commit477904ca751c50d243ee3cba3f12cf75e8ba12b3
treec8cc726797b77cc277f6ef04f51aa5deda085dfd
parent49fffa58f7e6da777d10fe77663bc7c8f531fe7f
Fix for v850e divq instruction

This is the last of the correctness fixes I've been carrying around for the
v850.

Like the other recent fixes, this is another case where we haven't been as
careful as we should WRT host vs target types.   For the divq instruction
both operands are 32 bit types.  Yet in the simulator code we convert them
from unsigned int to signed long by assignment.  So 0xfffffffb (aka -5)
turns into 4294967291 and naturally that changes the result of our division.

The fix is simple, insert a cast to int32_t to force interpretation as a
signed value.

Testcase for the simulator is included.  It has a trivial dependency on the
bins patch.
sim/testsuite/v850/divq.cgs [new file with mode: 0644]
sim/v850/simops.c