# HG changeset patch # User Thomas Wuerthinger # Date 1321881794 -3600 # Node ID 285d51520d4c3d32358604b7d3d862247e9edfab # Parent 3a05d8465ff1f8746ee8208b2ead90e82100d8b3 Relaxed div/rem code assertions, jtt passes with debug vm. diff -r 3a05d8465ff1 -r 285d51520d4c src/os/windows/vm/os_windows.cpp --- a/src/os/windows/vm/os_windows.cpp Mon Nov 21 14:12:10 2011 +0100 +++ b/src/os/windows/vm/os_windows.cpp Mon Nov 21 14:23:14 2011 +0100 @@ -2074,9 +2074,9 @@ PCONTEXT ctx = exceptionInfo->ContextRecord; address pc = (address)ctx->Rip; NOT_PRODUCT(Events::log("idiv overflow exception at " INTPTR_FORMAT , pc)); - assert(pc[0] == 0xF7 || (pc[1] == 0xF7 && pc[0] == 0x41), "not an idiv opcode"); + assert(pc[0] == 0xF7 || (pc[1] == 0xF7 && (pc[0] == 0x41 || pc[0] == 0x49)), "not an idiv opcode"); //assert((pc[1] & ~0x7) == 0xF8, "cannot handle non-register operands"); - assert((long)ctx->Rax == (long)min_jint, "unexpected idiv exception"); + assert((long)ctx->Rax == (long)min_jint || pc[0] == 0x49, "unexpected idiv exception"); // set correct result values and continue after idiv instruction ctx->Rip = (DWORD)pc + 2; // idiv reg, reg is 2 bytes ctx->Rax = (DWORD)min_jint; // result