--- codec.cc.original	2005-11-25 05:15:54.000000000 -0600
+++ codec.cc	2007-09-22 06:06:21.000000000 -0500
@@ -1839,6 +1839,16 @@
 CORBA::Boolean
 MICO::CDRDecoder::get_floats (CORBA::Float *p, CORBA::ULong l)
 {
+// Modified to get the sequence of values fast when using IEEE.
+#ifdef HAVE_IEEE_FP
+    if (!buf->ralign (4) || !check_chunk ()) {
+        return FALSE;
+    }
+
+    if (data_bo == mach_bo)
+	    return buf->get (p, 4*l);
+#endif // HAVE_IEEE_FP
+
     for (CORBA::Long i = l; --i >= 0; ++p) {
 	if (!get_float (*p))
 	    return FALSE;
@@ -1849,6 +1859,16 @@
 CORBA::Boolean
 MICO::CDRDecoder::get_doubles (CORBA::Double *p, CORBA::ULong l)
 {
+// Modified to get the sequence of values fast when using IEEE.
+#ifdef HAVE_IEEE_FP
+    if (!buf->ralign (8) || !check_chunk ()) {
+        return FALSE;
+    }
+
+    if (data_bo == mach_bo)
+	    return buf->get (p, 8*l);
+#endif // HAVE_IEEE_FP
+
     for (CORBA::Long i = l; --i >= 0; ++p) {
 	if (!get_double (*p))
 	    return FALSE;
@@ -1859,6 +1879,16 @@
 CORBA::Boolean
 MICO::CDRDecoder::get_longdoubles (CORBA::LongDouble *p, CORBA::ULong l)
 {
+// Modified to get the sequence of values fast when using IEEE.
+#if defined(HAVE_IEEE_FP) && SIZEOF_LONG_DOUBLE == 16
+    if (!buf->ralign (8) || !check_chunk ()) {
+        return FALSE;
+    }
+
+    if (data_bo == mach_bo)
+	    return buf->get (p, 16*l);
+#endif // HAVE_IEEE_FP
+
     for (CORBA::Long i = l; --i >= 0; ++p) {
 	if (!get_longdouble (*p))
 	    return FALSE;
