Hi David, Thanks for sharing this snippet.
I'm not a C person, so I have a dumb question: how does the value of microSecs not equal zero? From my naive view it would seem to be the difference between two things that are the same, with period having been equated to secs in the previous statement. I am guessing it may have something to do with microSecs and period being doubles where secs is an integer, but it may have nothing to do with that. Probably time for RTFM, which begs the question of which FM to R. Thanks again in advance for any elaboration while I try to find the answer, Peter On Sun, 19 Jan 2020 18:50:17 +0800, David Crayford <[email protected]> wrote: >The XLC compiler supports named operands in __asm blocks which are much >easier to understand. > >/** Constant for TOD clock unit for a second */ >static const uint64_t TOD_TIME_SEC = 0xF4240000LLU; > >int nanoSleep(double period) { > int rc; > int secs = period; > double microSecs = period - secs; > uint64_t timerUnits = (secs * TOD_TIME_SEC) + (microSecs * TOD_TIME_SEC); > __asm (" STIMER WAIT,MICVL=%[micvl]\n" > " ST 15,%[rc]" > : [rc]"=m"(rc) > : [micvl]"m"(timerUnits) > : "r15"); > return rc; >} > > >On 2020-01-18 12:31 AM, Farley, Peter x23353 wrote: >> The %0 and %1 are parameters to the __asm function, it will do the >> substitution of the 2nd and 3rd parameter in the __asm(...) invocation into >> the %0 and %1 spots in the 1st parameter. >> >> And I concur with your description - the *invocation* of the "SETUP(...)" >> macro will specify the variables to be used and *those* variables are the >> ones that need to be defined, "xx" and "yy" in your example. >> >> If the OP (Mr. Reichman) codes the *invocation* of the SETUP macro as >> follows: >> >> SETUP(supstate,key) >> >> Then both "supstate" and "key" must be defined C variables. >> >> The __asm function does not *define* variables, it just *uses* them. The >> variables mentioned in an __asm invocation must already be defined in the C >> code. >> >> Peter >> >> -----Original Message----- >> From: IBM Mainframe Discussion List <[email protected]> On Behalf Of >> retired mainframer >> Sent: Friday, January 17, 2020 11:06 AM >> To: [email protected] >> Subject: Re: Metal C using Z/OS macros in C macros >> >> In you C code, when you "invoke" the macro, you would provide the values of >> the two macro parameters. Something like >> SETSUP(xx,yy) >> It is the xx and yy that would show up inside the two parenthetical >> expressions in the generated code. Keep in mind that a C macro performs >> simple text substitution long before the actual compilation starts. >> >> Based on the generated code you show, you would not terminate the above >> invocation with a semicolon. >> >> I've never used __asm but is >> __asm ( " MODESET KEY=%0,MODE=%1 \n" : "=s"(xx), "=s"(yy) ) what you >> want the compiler to see? >> >> Are you using %0 and %1 to mean the macro parameters? That is not the way C >> macros work. >> >> It looks like there should be a line continuation back slash following the >> left brace. I don't think you want the one that follows the right brace >> since there is no following line. >> >>> -----Original Message----- >>> From: IBM Mainframe Discussion List <[email protected]> On >>> Behalf Of Joseph Reichman >>> Sent: Friday, January 17, 2020 5:22 AM >>> To: [email protected] >>> Subject: Metal C using Z/OS macros in C macros >>> >>> Just wondering if I can do something like this >>> >>> #define SETSUP(supstate,key) \ >>> { >>> __asm ( " MODESET KEY=%0,MODE=%1 \n" : "=s"(supstate), "=s"(key) ) \ >>> } \ >>> >>> Seems like the variables have to be defined >> ---------------------------------------------------------------------- >> >> This message and any attachments are intended only for the use of the >> addressee and may contain information that is privileged and confidential. >> If the reader of the message is not the intended recipient or an authorized >> representative of the intended recipient, you are hereby notified that any >> dissemination of this communication is strictly prohibited. If you have >> received this communication in error, please notify us immediately by e-mail >> and delete the message and any attachments from your system. >> >> ---------------------------------------------------------------------- >> For IBM-MAIN subscribe / signoff / archive access instructions, >> send email to [email protected] with the message: INFO IBM-MAIN > >---------------------------------------------------------------------- >For IBM-MAIN subscribe / signoff / archive access instructions, >send email to [email protected] with the message: INFO IBM-MAIN ---------------------------------------------------------------------- For IBM-MAIN subscribe / signoff / archive access instructions, send email to [email protected] with the message: INFO IBM-MAIN
