diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog
index 7e7aa4a40d1a84fd2620d23a685a799191fb79ad..586372a3b6de100a72be42987d5f6bf9bb2632ef 100644
--- a/libgcc/ChangeLog
+++ b/libgcc/ChangeLog
@@ -1,3 +1,7 @@
+2013-11-27  Uros Bizjak  <ubizjak@gmail.com>
+
+	* soft-fp/op-4.h: Update from glibc.
+
 2013-11-27  Kugan Vivekanandarajah  <kuganv@linaro.org>
 
 	* libgcc2.c (__udivmoddi4): Define new implementation when
@@ -24,7 +28,7 @@
 
 2013-11-22  Yuri Rumyantsev  <ysrumyan@gmail.com>
 
-	 * config/i386/cpuinfo.c (get_intel_cpu): Add Silvermont cases.
+	* config/i386/cpuinfo.c (get_intel_cpu): Add Silvermont cases.
 
 2013-11-18  Jan Hubicka  <jh@suse.cz>
 
diff --git a/libgcc/soft-fp/op-4.h b/libgcc/soft-fp/op-4.h
index 3515bdc497baa56abb0a8afb6171174c27e84c4e..6c6b4611662ca36c393d3ececf60542e0fbfa0af 100644
--- a/libgcc/soft-fp/op-4.h
+++ b/libgcc/soft-fp/op-4.h
@@ -709,7 +709,7 @@
       else if (rsize <= 2*_FP_W_TYPE_SIZE)				\
 	{								\
 	  r = X##_f[1];							\
-	  r <<= _FP_W_TYPE_SIZE;					\
+	  r = (rsize <= _FP_W_TYPE_SIZE ? 0 : r << _FP_W_TYPE_SIZE);	\
 	  r += X##_f[0];						\
 	}								\
       else								\
@@ -717,11 +717,11 @@
 	  /* I'm feeling lazy so we deal with int == 3words (implausible)*/ \
 	  /* and int == 4words as a single case.			 */ \
 	  r = X##_f[3];							\
-	  r <<= _FP_W_TYPE_SIZE;					\
+	  r = (rsize <= _FP_W_TYPE_SIZE ? 0 : r << _FP_W_TYPE_SIZE);	\
 	  r += X##_f[2];						\
-	  r <<= _FP_W_TYPE_SIZE;					\
+	  r = (rsize <= _FP_W_TYPE_SIZE ? 0 : r << _FP_W_TYPE_SIZE);	\
 	  r += X##_f[1];						\
-	  r <<= _FP_W_TYPE_SIZE;					\
+	  r = (rsize <= _FP_W_TYPE_SIZE ? 0 : r << _FP_W_TYPE_SIZE);	\
 	  r += X##_f[0];						\
 	}								\
     }									\