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]