OPS! typo.
MVC WF_MASK,0(R1)

Tony Thigpen

-----Original Message -----
 From: Tony Thigpen
 Sent: 05/29/2012 01:31 PM
I decided just to code a table. Here is the basics:
SLL R15,2
L R1,=A(@MASKS)
LA R1,0(R15,R1)
MVC WF_MASK,0(R15)

MASKALL DC X'FF'
MASK0 DC X'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00'
DC X'00000000000000000000000000000000'
MASK1 DC X'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80'
DC X'00000000000000000000000000000000'
MASK2 DC X'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0'
DC X'00000000000000000000000000000000'
MASK3 DC X'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0'
DC X'00000000000000000000000000000000'
MASK4 DC X'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0'
DC X'00000000000000000000000000000000'
MASK5 DC X'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8'
DC X'00000000000000000000000000000000'
MASK6 DC X'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC'
DC X'00000000000000000000000000000000'
MASK7 DC X'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE'
DC X'00000000000000000000000000000000'
@MASKS DS 0D
DC A(MASK0+15),A(MASK1+15),A(MASK2+15),A(MASK3+15)
DC A(MASK4+15),A(MASK5+15),A(MASK6+15),A(MASK7+15)
DC A(MASK0+14),A(MASK1+14),A(MASK2+14),A(MASK3+14)
DC A(MASK4+14),A(MASK5+14),A(MASK6+14),A(MASK7+14)
DC A(MASK0+13),A(MASK1+13),A(MASK2+13),A(MASK3+13)
DC A(MASK4+13),A(MASK5+13),A(MASK6+13),A(MASK7+13)
DC A(MASK0+12),A(MASK1+12),A(MASK2+12),A(MASK3+12)
DC A(MASK4+12),A(MASK5+12),A(MASK6+12),A(MASK7+12)
DC A(MASK0+11),A(MASK1+11),A(MASK2+11),A(MASK3+11)
DC A(MASK4+11),A(MASK5+11),A(MASK6+11),A(MASK7+11)
DC A(MASK0+10),A(MASK1+10),A(MASK2+10),A(MASK3+10)
DC A(MASK4+10),A(MASK5+10),A(MASK6+10),A(MASK7+10)
DC A(MASK0+09),A(MASK1+09),A(MASK2+09),A(MASK3+09)
DC A(MASK4+09),A(MASK5+09),A(MASK6+09),A(MASK7+09)
DC A(MASK0+08),A(MASK1+08),A(MASK2+08),A(MASK3+08)
DC A(MASK4+08),A(MASK5+08),A(MASK6+08),A(MASK7+08)
DC A(MASK0+07),A(MASK1+07),A(MASK2+07),A(MASK3+07)
DC A(MASK4+07),A(MASK5+07),A(MASK6+07),A(MASK7+07)
DC A(MASK0+06),A(MASK1+06),A(MASK2+06),A(MASK3+06)
DC A(MASK4+06),A(MASK5+06),A(MASK6+06),A(MASK7+06)
DC A(MASK0+05),A(MASK1+05),A(MASK2+05),A(MASK3+05)
DC A(MASK4+05),A(MASK5+05),A(MASK6+05),A(MASK7+05)
DC A(MASK0+04),A(MASK1+04),A(MASK2+04),A(MASK3+04)
DC A(MASK4+04),A(MASK5+04),A(MASK6+04),A(MASK7+04)
DC A(MASK0+03),A(MASK1+03),A(MASK2+03),A(MASK3+03)
DC A(MASK4+03),A(MASK5+03),A(MASK6+03),A(MASK7+03)
DC A(MASK0+02),A(MASK1+02),A(MASK2+02),A(MASK3+02)
DC A(MASK4+02),A(MASK5+02),A(MASK6+02),A(MASK7+02)
DC A(MASK0+01),A(MASK1+01),A(MASK2+01),A(MASK3+01)
DC A(MASK4+01),A(MASK5+01),A(MASK6+01),A(MASK7+01)
DC A(MASK0+00),A(MASK1+00),A(MASK2+00),A(MASK3+00)
DC A(MASK4+00),A(MASK5+00),A(MASK6+00),A(MASK7+00)
DC A(MASKALL)
DC X'FFFFFFFF'



Tony Thigpen

-----Original Message -----
From: robin
Sent: 05/29/2012 08:00 AM
From: Tony Thigpen
Sent: Tuesday, 29 May 2012 12:51 PM

I am working with some IPv6 addresses that are 128 bits long. The input
to the program is an ip name or address and the number of high bits that
I need to use for a compare against another ip address.

So, I want to create run time routine to build the a 16 byte 'and' bit
field based on the input number of bits. (I will then 'and' both
addresses and then use a simple CLC.)

A good way is to determine the bit start position.
Put 8 bits in a GPR. If shift is 1 thru 7, shift right the required no.
of bits.
Then store that.
For the end byte, do the same, only shift left.
For the bytes between the initial byte and end byte,
store zero or more characters (each of 8 one-bits).

Although a table built at compile time might be a reasonable solution,

How so? You say that the number of bits is input -- i.e. not a
compile-time value.

I thought this would be a good time to learn a new trick if someone has
one they can share.




Reply via email to