diff --git a/libevmjit/Compiler.cpp b/libevmjit/Compiler.cpp
index 75c81f9ed..a7006dcde 100644
--- a/libevmjit/Compiler.cpp
+++ b/libevmjit/Compiler.cpp
@@ -297,7 +297,7 @@ void Compiler::compileBasicBlock(BasicBlock& _basicBlock, RuntimeManager& _runti
 			auto r = m_builder.CreateSDiv(d, n);
 			r = m_builder.CreateSelect(divByZero, Constant::get(0), r);
 			auto dNeg = m_builder.CreateSub(Constant::get(0), d);
-			r = m_builder.CreateSelect(divByMinusOne, dNeg, r);
+			r = m_builder.CreateSelect(divByMinusOne, dNeg, r); // protect against undef i256.min / -1
 			stack.push(r);
 			break;
 		}
@@ -319,9 +319,11 @@ void Compiler::compileBasicBlock(BasicBlock& _basicBlock, RuntimeManager& _runti
 			auto d = stack.pop();
 			auto n = stack.pop();
 			auto divByZero = m_builder.CreateICmpEQ(n, Constant::get(0));
+			auto divByMinusOne = m_builder.CreateICmpEQ(n, Constant::get(-1));
 			n = m_builder.CreateSelect(divByZero, Constant::get(1), n); // protect against hardware signal
 			auto r = m_builder.CreateSRem(d, n);
 			r = m_builder.CreateSelect(divByZero, Constant::get(0), r);
+			r = m_builder.CreateSelect(divByMinusOne, Constant::get(0), r); // protect against undef i256.min / -1
 			stack.push(r);
 			break;
 		}