> What's more, the 3 or 4 registers needed for MVCL can be loaded by a single > instruction.
Only in special cases. Also, there are no cases where you need 4 registers to fill a block. -- Shmuel (Seymour J.) Metz http://mason.gmu.edu/~smetz3 ________________________________________ From: IBM Mainframe Assembler List [[email protected]] on behalf of Robin Vowels [[email protected]] Sent: Friday, April 15, 2022 11:28 PM To: [email protected] Subject: Re: Next instruction not needed From: "Tom Harper" <[email protected]> Sent: Saturday, April 16, 2022 12:34 AM Subject: Re: Next instruction needed > Robin, > See embedded remarks. See mine. MVCL will do what you want. It was designed to do the operation without overruns. The lengths of the source and the destination areas are both specified in the relevant registers, and the move terminates when the destination area has been filled. The true lengths of the data areas are given in registers, and MVCL will even deal with zero lengths. It's a dream instruction. What's more, the 3 or 4 registers needed for MVCL can be loaded by a single instruction. The most common use of MVCL is to move some text to a destination area, and to pad that area with a given character (commonly blank, not zero), if required. To set an area to zeros is not something that's done frequently. I would say, almost never. Your objection to MVCL needing 3 registers for your special case (rarely needed) is specious; that 3 registers are not often available, also specious; other instructions need 3 registers, such as MR, DR, BXH, BXLE, and other instructions need 2 registers e,g, BCTR, SLDA, SRDA, etc. See below for interspersed replies. > Tom > On Apr 15, 2022, at 5:08 AM, Robin Vowels <[email protected]> wrote: > > ----- Original Message ----- From: "Tom Harper" > <[email protected]> > To: <[email protected]> > Sent: Friday, April 15, 2022 3:06 AM > > >>> IMHO, the next instruction to add to z/Architecture would be an instruction >>> to clear storage to >>> zeros. Who needs it? I cannot recall ever seeing a program that ever did that. Nor ever needed it. >>> Right now a number of methods are in widespread use, Really? >>> none of which are clean and simple. I mean, it’s been almost sixty years. > >>> MVCL takes three registers to set up beforehand; > >> So? Write yourself a macro. Of course a macro can be written. But that’s not the point. Three registers will have to be loaded and that takes time and the registers are not always easily available. Three registers are always easily available. Think about MR, DR, BXH, BXLE, LM, etc. >> XC sets the condition code and is not variable length, and the overlapping >> MVC is a kluge > >> But it does the job well. > Except that it can only handle fixed length without an execute instruction > which is a poor > performer. There is another way to do it. >> Also needlessly sets the condition code which slows down the processor. Rubbish. >>> and not variable length either. > >> Use Ex. >A poor performer. > >>> An EX instruction is also a kluge. > >>> All you need is the address and length to accomplish this, preferably in >>> two versions, >>> one with an immediate operand for the length > >> Really?! A few lines ago, you were decrying XC and MVC because they have a >> "fixed length". >They are fixed length unless you use an execute instruction. There are other ways. >>> and another which uses, for example, a register, perhaps register zero. A >>> long displacement >>> would be a plus. > >>> To avoid issues with interruptibility, the length would need to be limited >>> to 256 bytes. > >> What? Back to a limit of 256? what's the point of that? >> MVCL will do as long as you want. > Yes it will. But a common need is for shorter lengths. > >>> I don’t think the length restriction would be an issue in most cases. > >> There's no point in having an instruction with a length restrictionof 256. > I’ve been doing this for a very long time and I will respectfully disagree > with you. > There are frequent cases to clear fields of 256 bytes or less. I disagree. The most frequent case is to move some text into a field and to blank fill the remainder of the destination area, for which MVCL is an ideal instruction. >>> Such an instruction might look like this: > >>> CLEAR FieldA > >>> Or > >>> LLGF R0,Varlen >>> CLEARR > >> A macro reference would require one require one line. > True, but not relevant. I disagree. It's precisely relevant. > The purpose of this instruction is to have a simple instruction that performs > a frequently used > function that the processor can execute quickly. I disagree that it is "a frequently used function". See above. >>> Similar instructions for compare logical and move would be nice as well. --- This email has been checked for viruses by Avast antivirus software. https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.avast.com%2Fantivirus&data=05%7C01%7Csmetz3%40gmu.edu%7C459b6f0d398346a033b908da1f59225f%7C9e857255df574c47a0c00546460380cb%7C0%7C0%7C637856764948991891%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=1zT9t6dhocbTM%2B43%2F5qJn5Lt8F%2F6UDjFkXV5A613PVU%3D&reserved=0
