Behavior is now same as GCC's optimizer. Previously, we just crashed :)
require64;
-RD = sreg_t(RS1) / sreg_t(RS2);
+if(RS2 == 0 || sreg_t(RS1) == INT64_MIN && sreg_t(RS2) == -1)
+ RD = sreg_t(RS1) < 0 ? INT64_MIN : INT64_MAX;
+else
+ RD = sreg_t(RS1) / sreg_t(RS2);
require64;
-RD = RS1 / RS2;
+if(RS2 == 0)
+ RD = UINT64_MAX;
+else
+ RD = RS1 / RS2;
-RD = sext32(uint32_t(RS1)/uint32_t(RS2));
-
+if(uint32_t(RS2) == 0)
+ RD = sext32(UINT32_MAX);
+else
+ RD = sext32(uint32_t(RS1)/uint32_t(RS2));
-RD = sext32(int32_t(RS1)/int32_t(RS2));
-
+if(int32_t(RS2) == 0 || int32_t(RS1) == INT32_MIN && int32_t(RS2) == -1)
+ RD = sext32(int32_t(RS1) < 0 ? INT32_MIN : INT32_MAX);
+else
+ RD = sext32(int32_t(RS1)/int32_t(RS2));
require64;
-RD = sreg_t(RS1) % sreg_t(RS2);
+if(RS2 == 0 || sreg_t(RS1) == INT64_MIN && sreg_t(RS2) == -1)
+ RD = 0;
+else
+ RD = sreg_t(RS1) % sreg_t(RS2);
require64;
-RD = RS1 % RS2;
+if(RS2 == 0)
+ RD = 0;
+else
+ RD = RS1 % RS2;
-RD = sext32(uint32_t(RS1) % uint32_t(RS2));
-
+if(uint32_t(RS2) == 0)
+ RD = 0;
+else
+ RD = sext32(uint32_t(RS1) % uint32_t(RS2));
-RD = sext32(int32_t(RS1) % int32_t(RS2));
-
+if(int32_t(RS2) == 0 || int32_t(RS1) == INT32_MIN && int32_t(RS2) == -1)
+ RD = 0;
+else
+ RD = sext32(int32_t(RS1) % int32_t(RS2));