If you use zOS and applications running zOS as frequent as I do, you probably have defined best-scenarios possible to perform repeating tasks [as I have]. One of the things that I often have to do on a daily basis is to investigate and debug application errors and often the first lead I have into what the root cause maybe is the output and/or error messages. Just in case some of you may not know about this online facility that lets you look up explanations for the IBM messages, as well as for some system abends and codes, I provide a link... [More]
The XL C METAL compiler option generates code that does not require access to the Language Environment support at run time. Instead, the METAL option provides C-language extensions that allow you to specify assembly statements that call system services directly. Using these language extensions, you can provide almost any assembly macro, and your own function prologs and epilogs, to be embedded in the generated HLASM source file. When you understand how the METAL-generated code uses MVS linkage conventions to interact with HLASM code, you can... [More]
Recently I came across a whitepaper regarding new METAL C features for the latest release for the compiler on z/OS (z/OS V1.13 XL C/C++) posted here . The whitepaper provides a broad general overview of the new features for METAL C with a lot of examples sprinkled throughout to make it easy to understand. It is a handy guide for new and existing METAL C developers or people interested in METAL C in general, even though the focus is on new features added in V1.13.
METAL C was originally introduced in the z/OS V1R9 XL C/C++ compiler... [More]
Check out all the information about the latest release of z/OS XL C/C++.
You can get a summary of the release as well as all the announcement
details. See What's new in z/OS V1R13 XL C/C++ including enhancements to leverage the latest z/OS. For all the details about the z/OS V1R13 XL C/C++ announcement, see IBM z/OS V1.13 delivers new availability, batch programming, and usability functions .
In two previous posts ( here and here ) I discussed using the PFD prefetch instruction via the compiler provided bifs (built-in functions). This forum post describes how one might use this bif with a dynamic data structure such as a queue.
In a previous blog entry I discussed how one might incorporate the prefetch built-in function (bif) into a z/OS binary that is compiled with ARCH(5) i.e. a binary that will run on all supported hardware, yet when it detects it is running on a z10 or z196 system, would be able to utilize the prefetch instruction. There was a request for examples of using prefetch , which I thought was a good idea, so starting with this entry, I'll present some examples of how one might use this instruction. I'll start with a simple, basic program and in... [More]
Wondering how you can maximize the performance of your application? With the IBM z/OS C/C++ compiler, you can use a variety of compiler options, source constructs, and techniques to optimize your application. Exploiting these features will allow you to gain the most out of your IBM zEnterprise™ System. More details on how you can take advantage of these features can be found here: http://ibm.co/lDSXo9
I came across an interesting article on porting your C/C++ applications from IBM AIX to IBM z/OS. It contains information on issues you may encounter to make the porting effort smother and more error-free. It also provides some interesting points on optimizing your application once it is ported. More details can be found here: How to port from IBM AIX to IBM z/OS
Which option combination do you think yields a faster execution? A. -O2 –qinline B. -O2 –qnoinline By specifying –qinline user is asking the compiler to inline functions that meets the criteria of inlining threshold and limit size: for the z platform the default value for the relative size of the function to be inlined is 100 ACUs and the maximum relative size a function can grow before inliner stops inlining more is 1000 ACUs . While inlining eliminates the linkage overhead and provides a larger code to the compiler to be optimized, its... [More]
This is my first post on our C/C++ Cafe that has been long in coming. If you are like me, then you are a new zOS programmer. The learning ride has been quite turbulent and there are ways to go yet. If you are a devoted programmer then you feel quiet excitement of your new program almost working, tempered by the chance of another large manual being 'thrown' at you. zOS is one of those products that has too much of a good thing, that is there is a LOT of documentation. This fact very quickly becomes an advantage as one gains more experience. No... [More]
I think this option's name, (especially the negative one), is pretty confusing. Be that as it may, NOSEARCH wipes out all the previous search specifications and SEARCH sets them. In METAL C a subset of standard C libraries have been defined, in this context this option becomes pretty handy. In short, if strcpy is used in the user code, to avoid unexpected compile time messages complaining about strcpy syntax, incorrect run time behavior or what not, its declaration and definition should be pulled in from the METAL string.h header file. cat... [More]
So many times we get clients complaining to us that their code used to work on an older release but it's broken using the new release of the compiler. After closer look at the sample test case provided, we find out they have been lucky to have a working copy of the code. You see, the breakage is expected because they have broken the ansi-aliasing rules. Not many of us follow the rules defined in C and C++ standards^1^ religiously. Although, the aliasing rules encourage accessing an object by lvalues of types compatible, we often have to break... [More]
Compilers are expected to make volatiles immune to optimizations that result in incorrect access to the volatile variables e.g. reducing the load/stores, re-ordering them, and etc. A recent study on volatiles identified a few bugs with GCC 4.3.0 and LLVM-GCC 2.2. We put our compiler to test and found none of the three bugs identified in this paper applies. Not bad! The first test case loads a volatile variable in the loop. Although invariant, we expect the compiler to leave x in the loop. The generated pseudo assembly code at O2 and O3... [More]
Here we are eleven days into a new year; and I would like to wish all of you a happy belated 2009! May this be a year of making technology less complex, more intuitive, friendlier and greener. Is it clear why we have RENT|NORENT compiler option? Do you know that C++ always uses constructed re-enterancy? Can you imagine how applications can benefit most from this? Recently, I developed a greater appreciation for RENT option, that is after I banged my head against the wall to REALLY understand what RENT is all about in order to fix a related... [More]