diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 07d2c8e9d9f8f1a8d4a6695116d56dac95ce3de7..b59be3048ad74c34136f15c15ea85c26a6ffde7d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2009-05-19  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+	* builtins.c (do_mpc_arg1): Separate MPFR/MPC C rounding types.
+
 2009-05-19  Ben Elliston  <bje@au.ibm.com>
 
 	* unwind-dw2-fde.c (fde_unencoded_compare): Replace type punning
diff --git a/gcc/builtins.c b/gcc/builtins.c
index b704394f31e4ef3d618579ec44634d7cbde357f8..783fce4ec68fc6de803b1b1e43c27546b7d4be7f 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -13671,6 +13671,7 @@ do_mpc_arg1 (tree arg, tree type, int (*func)(mpc_ptr, mpc_srcptr, mpc_rnd_t))
 	    REAL_MODE_FORMAT (TYPE_MODE (TREE_TYPE (type)));
 	  const int prec = fmt->p;
 	  const mp_rnd_t rnd = fmt->round_towards_zero ? GMP_RNDZ : GMP_RNDN;
+	  const mpc_rnd_t crnd = fmt->round_towards_zero ? MPC_RNDZZ : MPC_RNDNN;
 	  int inexact;
 	  mpc_t m;
 	  
@@ -13678,7 +13679,7 @@ do_mpc_arg1 (tree arg, tree type, int (*func)(mpc_ptr, mpc_srcptr, mpc_rnd_t))
 	  mpfr_from_real (MPC_RE(m), re, rnd);
 	  mpfr_from_real (MPC_IM(m), im, rnd);
 	  mpfr_clear_flags ();
-	  inexact = func (m, m, rnd);
+	  inexact = func (m, m, crnd);
 	  result = do_mpc_ckconv (m, type, inexact);
 	  mpc_clear (m);
 	}