MIPS: Fix simulator divide for overflow case.
TEST=mjsunit/div-mul-minus-one.js BUG= R=gergely@homejinni.com Review URL: https://codereview.chromium.org/24956002 Patch from Paul Lind <plind44@gmail.com>. git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@16982 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
936802ae21
commit
c34af4ae6d
@ -2274,9 +2274,13 @@ void Simulator::DecodeTypeRegister(Instruction* instr) {
|
||||
break;
|
||||
case DIV:
|
||||
// Divide by zero and overflow was not checked in the configuration
|
||||
// step - div and divu do not raise exceptions. On division by 0 and
|
||||
// on overflow (INT_MIN/-1), the result will be UNPREDICTABLE.
|
||||
if (rt != 0 && !(rs == INT_MIN && rt == -1)) {
|
||||
// step - div and divu do not raise exceptions. On division by 0
|
||||
// the result will be UNPREDICTABLE. On overflow (INT_MIN/-1),
|
||||
// return INT_MIN which is what the hardware does.
|
||||
if (rs == INT_MIN && rt == -1) {
|
||||
set_register(LO, INT_MIN);
|
||||
set_register(HI, 0);
|
||||
} else if (rt != 0) {
|
||||
set_register(LO, rs / rt);
|
||||
set_register(HI, rs % rt);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user