We're still on a z9BC as well, but I found the new storage immediate
(CLGHSI, CLFHSI, CLHHSI, CGHSI, CFHSI, CHHSI, MVGHI, MVHI, MVHHI) and
COMPARE AND JUMP (C[L][G][I|R]Jxx) instructions to be useful enough that I
wrote macros to emulate them (with a few restrictions on usage, e.g.
COMPARE AND JUMP does not set a condition code, so after a COMPARE AND JUMP
in our code, the condition code is undefined since you don't know if you
executed the single instruction or a series of emulation instructions).

With immediate operand value bounds checking code in the macro, I hit the
limitation that a literal string cannot exceed 256 characters, whereas an
immediate value has no equivalent restriction:

                                           22125          CGIJL
R01,132-(L'BKwa_Module+1+L'BK_LPAOS+1),BK250             00324401
                                           22126+         P49CJIE
CGIJL,R01,132-(L'BKwa_Module+1+L'BK_LPAOS+1),BK250     01-CGIJL
0000319E A71F 0065               00000065  22127+         CGHI
R01,(1-((((132-(L'BKwa_Module+1+L'BK_LPAOS+1))-((132-(L'X02-P49CJIE
                                                +               BKwa_Module
+1+L'BK_LPAOS+1))/256)*256)+256-((((132-(L'BKX
                                                +               wa_Module+1
+L'BK_LPAOS+1))-((132-(L'BKwa_Module+1+L'BK_LX
                                                +               PAOS
+1))/256)*256)+256)/256)*256)/128))*(((132-(L'BKwa_MX
                                                +               odule+1
+L'BK_LPAOS+1))-((132-(L'BKwa_Module+1+L'BK_LPAOSX
                                                +
+1))/256)*256)+256-((((132-(L'BKwa_Module+1+L'BK_LPAOS+1X

+               ))-((132-(L'BKwa_Module+1+L'BK_LPAOS+1))/256)*256)+256)/X
                                                +               256)*256)+
((((132-(L'BKwa_Module+1+L'BK_LPAOS+1))-((132-X
                                                +
(L'BKwa_Module+1+L'BK_LPAOS+1))/256)*256)+256-((((132-(LX
                                                +
'BKwa_Module+1+L'BK_LPAOS+1))-((132-(L'BKwa_Module+1+L'BX
                                                +               K_LPAOS
+1))/256)*256)+256)/256)*256)/128)*((((132-(L'BKwX
                                                +               a_Module+1
+L'BK_LPAOS+1))-((132-(L'BKwa_Module+1+L'BK_LPX
                                                +               AOS
+1))/256)*256)+256-((((132-(L'BKwa_Module+1+L'BK_LPAOX
                                                +               S
+1))-((132-(L'BKwa_Module+1+L'BK_LPAOS+1))/256)*256)+25X
                                                +
6)/256)*256)-256)+((132-(L'BKwa_Module+1+L'BK_LPAOS+1))+X
                                                +
2147483520)*0+((132-(L'BKwa_Module+1+L'BK_LPAOS+1))-2147X
                                                +               483520)*0
Emulated z10 CGIJL instruction
000031A2 A744 0004               000031AA  22128+         JL
BK250             ...                                    02-P49CJIE

                                            7632          MVHHI
U051LL,(U051HDRL-L'DG$ACRS)+(U012LEN-L'DG$ACRS)          00332903
                                            7633+         P49SIIE
MVHHI,U051LL,(U051HDRL-L'DG$ACRS)+(U012LEN-L'DG$ACRS)  01-MVHHI
00002C0A 0000 0000 0000 00000000 00000000   7634+         MVC   U051LL
(2),=ADL2((((U051HDRL-L'DG$ACRS)+(U012LEN-L'DG$ACRX02-P49SIIE
                                                +
S))/32768)*(((U051HDRL-L'DG$ACRS)+(U012LEN-L'DG$ACRS))-6X
                                                +
5536)+(1-(((U051HDRL-L'DG$ACRS)+(U012LEN-L'DG$ACRS))/327X
                                                +
68))*((U051HDRL-L'DG$ACRS)+(U012LEN-L'DG$ACRS))+(((U051HX
                                                +               DRL-L'DG
$ACRS)+(U012LEN-L'DG$ACRS))/65536)*65537*65537)
** ASMA149E Literal length exceeds 256 characters, including = sign -
         =ADL2((((U051HDRL-L'DG$ACRS)+(U012LEN-L'DG
$ACRS))/32768)*(((U051HDRL-L'DG$ACRS)+(U012LEN-L'DG
$ACRS))-65536)+(1-(((U051HDRL-
         L'DG$ACRS)+(U012LEN-L'DG$ACRS))/32768))*((U051HDRL-L'DG$ACRS)+
(U012LEN-L'DG$ACRS))+(((U051HDRL-L'DG$ACRS)+(U012LEN-L'DG$ACR
         S))/65536)
** ASMA435I Record 301 in SOME.MACLIB(P49SIIE) on volume: VVVVVV
                                            7635 ***      Emulated, the
above literal exceeds 256 characters,            00332904
                                            7636 ***      use an equivalent
(but shorter) expression below               00332905
                                            7637          MVHHI
U051LL,U051HDRL+U012LEN-2*L'DG$ACRS                      00332906
                                            7638+         P49SIIE
MVHHI,U051LL,U051HDRL+U012LEN-2*L'DG$ACRS              01-MVHHI
00002C10 D201 5004 CB4A 00000004 00004CA0   7639+         MVC   U051LL
(2),=ADL2(((U051HDRL+U012LEN-2*L'DG$ACRS)/32768)*(X02-P49SIIE
                                                +               (U051HDRL
+U012LEN-2*L'DG$ACRS)-65536)+(1-((U051HDRL+U012X
                                                +               LEN-2*L'DG
$ACRS)/32768))*(U051HDRL+U012LEN-2*L'DG$ACRS)+X
                                                +               ((U051HDRL
+U012LEN-2*L'DG$ACRS)/65536)*65537*65537)


Robert Ngan
CSC Financial Services Group



From:   "McKown, John" <[email protected]>
To:     [email protected]
Date:   2012/11/26 16:21
Subject:        Re: Stupid? though on a new "execute" instruction.
Sent by:        IBM Mainframe Assembler List <[email protected]>



OK, bad example. I'm stuck on a z9BC, likely until the end of the current
age of computing (tentatively scheduled for 21 Dec 2012, I've been told). I
had forgotten about those. So, how about to prevent a division by zero
condition?

[snipped, because reply rejected since it exceeded 250 line limit]

Reply via email to