<snip>
Why isn't there a Move Relative Long instruction
</snip>

The answer is likely because there is insufficient reason to have one, to 
justify the cost.

Instructions are typically created when they solve a problem and, often, when 
they can be done faster if implemented in the machine than if done piece by 
piece in a program (which, surprising to some, is not necessarily the case if 
the instruction is implemented in millicode).

Why can't you simply use MVCL (or MVCLE), having set up the address operands 
using LARL if they are relatively addressable (as long as a halfword boundary 
is OK as a limitation)?

Any instruction that needs two fully defined addresses (think of an SS-type 
instruction such as MVC) has limited space for additional information (such as 
a length). The instruction length is limited to 6 bytes. You need at least 2 
bytes for base+displacement or for the offset if relatively addressing, for 
each of the two operands. You need at least 1 byte for the opcode. That leaves 
you one byte for everything else. MVCL has a lot of "everything else". That is 
why MVCL has its operands in double-reg pairs. So would any other MVCL-like 
thing. So the approach for using a hypothetical move-long-relative would be the 
same as using MVCL, just using LARL where needed. And once the setup has been 
done, there is no need for a new instruction.

Peter Relson
z/OS Core Technology Design

Reply via email to