|
Right, ** Faster mem-to-mem copy without embedded pointers: D cpybytes PR ExtProc('_CPYBYTES') D pTarget * Value D pSource * Value D nLength 10U 0 Value -Bob Cozzi -----Original Message----- From: rpg400-l-bounces@xxxxxxxxxxxx [mailto:rpg400-l-bounces@xxxxxxxxxxxx] On Behalf Of Keith Carpenter Sent: Thursday, September 16, 2004 12:15 PM To: rpg400-l Subject: Re: Builtins The next question will probably be What's the actual built-in name for CPYBYTES() ? You can probably guess that it's _CPYBYTES Unless someone knows a better way, I use the following to determine the builtin names. Gene Gaunt posted a REXX procedure which produces a listing of built-ins names. The REXX procedure is here. http://archive.midrange.com/mi400/200006/msg00111.html Not all built-ins listed are available for general use, so you must check the infocenter as to whether the built-in is documented for usage. Some of the undocumented ones are "privileged" instructions that are "blocked" from normal usage. But this is a topic that can be further discussed over on the MI400 list. Here's a list of the first few entries from a V4R5 system. __memcpy 97 0 0 15 0 __memcmp 97 0 0 17 0 __memset 97 0 0 10 0 _MEMMOVE 97 0 0 16 0 __strlen 97 0 0 23 0 __strcpy 97 0 0 11 0 __strcmp 97 0 0 18 0 __abs 44 __fabs 44 _STRNCMPNULL 97 0 0 19 0 _STRNCPYNULL 97 0 0 13 0 _STRNCPYNULLPAD 97 0 0 12 0 _CPYBYTES 97 0 0 9 0 _CPYBWP 97 0 0 14 0 _FINDBYTE 97 0 0 20 0 _MEMCHR 97 0 0 22 0 _STRCHRNULL 97 0 0 21 0 _CMPTOPAD 97 0 0 429 0 _TSTBTS 97 0 0 1 0 Of interest is the built-in name and built-in number (the forth column number across). Looking at _CPYBYTES, the number is 9. This is the same built-in number as found in the infocenter documentation. Apparently that the importance of the built-in number relates to how the compiler (binder) ultimately resolves the function for generating the executible code. Keith > IBM occasionally moves certain instructions (from HLL's) into MI built-ins > to improve performance. Obviously memcpy() is called a lot in C and to > improve performance, they made it an MI instruction too. > There is also CPYBYTES() which is twice as fast at copying bytes of data > from one location to another as memcpy or cpybla, but the cost of that is > that you can't have any embedded pointers in the data being copied. > -Bob -- This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing list To post a message email: RPG400-L@xxxxxxxxxxxx To subscribe, unsubscribe, or change list options, visit: http://lists.midrange.com/mailman/listinfo/rpg400-l or email: RPG400-L-request@xxxxxxxxxxxx Before posting, please take a moment to review the archives at http://archive.midrange.com/rpg400-l.
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.