Thanks! Didn't think of the LIST option (duh!) and didn't want to go through the hassle of writing code to truly test it -- passing a value and displaying it.
So much for the P/G, which says "R0 Undefined." I suppose they did it this way before 64-bit hardware was universal and then fell into the compatibility trap. Charles -----Original Message----- From: IBM Mainframe Discussion List [mailto:[email protected]] On Behalf Of John McKown Sent: Tuesday, December 08, 2015 7:57 AM To: [email protected] Subject: Re: Can an assembler routine return a 64-bit value to C? On Tue, Dec 8, 2015 at 9:22 AM, Charles Mills <[email protected]> wrote: > Has anyone returned a long long (64 bit) value from non-XPLINK > assembler to IBM XLC? (C++, if it makes any difference.) I am > referring to a return value as in long long MYFUNC(). I know I can > pass a 64-bit integer by reference. > > It seems to me it ought to work -- register 15 has been 64 bits for what? > ten years now? -- but the P/G explicitly says "R15 Return value for > integer types (long int, short int, char) and pointer types. Otherwise set to > 0." > > Thanks, > > Charles > > I did a quick compile (segment below). The return value of "long long" is returned in the lower 32 bits of R15 (upper word) and R0 (lower word). compile listed (heavily edited!) 000119 | * } 000120 | * long long myfunc(void) { return 1L;} 000088 000120 | myfunc DS 0D 000088 47F0 F024 000120 | B 36(,r15) 00008C 01C3C5C5 CEE eyecatcher 000090 00000098 DSA size 000094 00001B70 =A(PPA1-myfunc) 000098 47F0 F001 000120 | B 1(,r15) 00009C 58F0 C31C 000120 | L r15,796(,r12) 0000A0 184E 000120 | LR r4,r14 0000A2 05EF 000120 | BALR r14,r15 0000A4 00000000 =F'0' 0000A8 A7F4 000C 000120 | J *+24 0000AC 90E4 D00C 000120 | STM r14,r4,12(r13) 0000B0 58E0 D04C 000120 | L r14,76(,r13) 0000B4 4100 E098 000120 | LA r0,152(,r14) 0000B8 5500 C314 000120 | CL r0,788(,r12) 0000BC A724 FFF0 000120 | JH *-32 0000C0 5000 E04C 000120 | ST r0,76(,r14) 0000C4 9210 E000 000120 | MVI 0(r14),16 0000C8 50D0 E004 000120 | ST r13,4(,r14) 0000CC 18DE 000120 | LR r13,r14 0000CE End of Prolog 0000CE 41F0 0000 000120 | LA r15,0 0000D2 4100 0001 000120 | LA r0,1 0000D6 000120 | @2L73 DS 0H 0000D6 Start of Epilog 0000D6 58D0 D004 000120 | L r13,4(,r13) 0000DA 58E0 D00C 000120 | L r14,12(,r13) 0000DE 9824 D01C 000120 | LM r2,r4,28(r13) 0000E2 051E 000120 | BALR r1,r14 0000E4 0707 000120 | NOPR 7 ---------------------------------------------------------------------- For IBM-MAIN subscribe / signoff / archive access instructions, send email to [email protected] with the message: INFO IBM-MAIN
