Jeffrey D. Smith wrote: |Well, it seems simple enough to wrap SETFRR to force |AMODE(31), then bounce back to whatever the AMODE |was before (31 or 64): | | BAS R14,WRAP | SETFRR .... | BSM 0,R14 |WRAP O R14,=X'80000000' | BASSM R14,R14 | |This should work whether the code is running AMODE(31) |or AMODE(64), eh? (My code is always below the bar.) It |doesn't have to test the amode or the architecture. | |Most of my code runs without "knowing" that it is |AMODE(64) or AMODE(31). Only on entry will it check |for AMODE(64) caller (via ESTA for PSW) and use the |LLGTR thing to clear the garbage bits from caller |addresses.
Ummm... Right now, *all* AMODE 64 code is below bar. But, that doesn't usually prevent it from having to use the grande instructions. I guess you've just been lucky, your code is very carefully constructed, or it references *nothing* above the bar (which makes me wonder why you would run in AMODE 64 in the first place). Most of the time, AMODE 64 programs of any significant size can't depend on the high halves of the registers always being zero throughout the execution of the program, which would preclude the need to use the grande instructions for loading addresses known to be below the bar. Have you ever tried running your code with the IeaInitArSrb and IeaInitRegsTask DIAG TRAPS enabled? -- Edward E Jaffe Phoenix Software International, Inc 5200 W Century Blvd, Suite 800 Los Angeles, CA 90045 310-338-0400 x318 [EMAIL PROTECTED] http://www.phoenixsoftware.com/ ---------------------------------------------------------------------- For IBM-MAIN subscribe / signoff / archive access instructions, send email to [EMAIL PROTECTED] with the message: GET IBM-MAIN INFO Search the archives at http://bama.ua.edu/archives/ibm-main.html

