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

Reply via email to