Merge branch 'branch_v3.1'
diff --git a/double-conversion/utils.h b/double-conversion/utils.h
index 41c5b02..2e1be0d 100644
--- a/double-conversion/utils.h
+++ b/double-conversion/utils.h
@@ -94,7 +94,7 @@
     defined(_MIPS_ARCH_MIPS32R2) || \
     defined(__AARCH64EL__) || defined(__aarch64__) || defined(__AARCH64EB__) || \
     defined(__riscv) || \
-    defined(__or1k__)
+    defined(__or1k__) || defined(__arc__)
 #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1
 #elif defined(__mc68000__) || \
     defined(__pnacl__) || defined(__native_client__)
diff --git a/test/cctest/test-bignum-dtoa.cc b/test/cctest/test-bignum-dtoa.cc
index 8649464..28063a5 100644
--- a/test/cctest/test-bignum-dtoa.cc
+++ b/test/cctest/test-bignum-dtoa.cc
@@ -191,6 +191,11 @@
   CHECK_EQ("35844466", buffer.start());
   CHECK_EQ(299, point);
 
+  BignumDtoa(1e-23, BIGNUM_DTOA_SHORTEST, 0,
+             buffer, &length, &point);
+  CHECK_EQ("1", buffer.start());
+  CHECK_EQ(-22, point);
+
   uint64_t smallest_normal64 = UINT64_2PART_C(0x00100000, 00000000);
   double v = Double(smallest_normal64).value();
   BignumDtoa(v, BIGNUM_DTOA_SHORTEST, 0, buffer, &length, &point);
diff --git a/test/cctest/test-conversions.cc b/test/cctest/test-conversions.cc
index 1173416..9ebc823 100644
--- a/test/cctest/test-conversions.cc
+++ b/test/cctest/test-conversions.cc
@@ -36,6 +36,10 @@
   CHECK_EQ("1e+21", builder.Finalize());
 
   builder.Reset();
+  CHECK(dc.ToShortest(1e-23, &builder));
+  CHECK_EQ("1e-23", builder.Finalize());
+
+  builder.Reset();
   CHECK(dc.ToShortest(1e20, &builder));
   CHECK_EQ("100000000000000000000", builder.Finalize());