You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stdcxx.apache.org by se...@apache.org on 2008/07/20 01:25:46 UTC

svn commit: r678239 - /stdcxx/branches/4.2.x/src/strtol.h

Author: sebor
Date: Sat Jul 19 16:25:45 2008
New Revision: 678239

URL: http://svn.apache.org/viewvc?rev=678239&view=rev
Log:
2008-07-19  Martin Sebor  <se...@roguewave.com>

	STDCXX-997
	* src/strtol.cpp [__SUNPRO_CC] (__rw_strtol, __rw_strtoul): Used
	#pragma no_side_effects to help Sun C++ optimizer generate better
	code (about 5% improvement was measured).
	[__SUNPRO_CC && _RWSTD_LONG_LONG] (__rw_strtoll, __rw_strtoull):
	Same.

Modified:
    stdcxx/branches/4.2.x/src/strtol.h

Modified: stdcxx/branches/4.2.x/src/strtol.h
URL: http://svn.apache.org/viewvc/stdcxx/branches/4.2.x/src/strtol.h?rev=678239&r1=678238&r2=678239&view=diff
==============================================================================
--- stdcxx/branches/4.2.x/src/strtol.h (original)
+++ stdcxx/branches/4.2.x/src/strtol.h Sat Jul 19 16:25:45 2008
@@ -22,7 +22,7 @@
  * implied.   See  the License  for  the  specific language  governing
  * permissions and limitations under the License.
  *
- * Copyright 1994-2006 Rogue Wave Software.
+ * Copyright 1994-2008 Rogue Wave Software, Inc.
  * 
  **************************************************************************/
 
@@ -35,11 +35,14 @@
 _RWSTD_EXPORT extern const unsigned char
 __rw_digit_map[];
 
+
+// same as strtoul() except that the source sequence must start
+// with a sign (either '+' or '-')
 unsigned long
- __rw_strtoul (const char*, int*, int);
+__rw_strtoul (const char*, int*, int);
 
 long
- __rw_strtol (const char*, int*, int);
+__rw_strtol (const char*, int*, int);
 
 
 #ifdef _RWSTD_LONG_LONG
@@ -77,4 +80,20 @@
 #endif   // _RWSTD_LONG_LONG
 
 
+#ifdef __SUNPRO_CC
+
+   // tell the Sun C++ optimizer that the functions do not access
+   // for reading or writing any part of the program state (either
+   // visible at in the caller at the point of the call, or not)
+#  pragma no_side_effect (__rw_strtoul)
+#  pragma no_side_effect (__rw_strtol)
+
+#  ifdef _RWSTD_LONG_LONG
+#    pragma no_side_effect (__rw_strtoull)
+#    pragma no_side_effect (__rw_strtoll)
+#  endif   // _RWSTD_LONG_LONG
+
+#endif   // Sun C++
+
+
 }   // namespace __rw