OPTABLE(YOP) enables long-displacement which ignores USING ranges when
assembling long-displacement capable instructions.  (I strongly disagree
with that design decision because it destroys the usefulness of USING ranges.)

And the long-displacement capability was added to many of the z900
instructions.  Instructions such as LG will not be assembled using
long-displacements with OPTABLE(ZOP) but can be with OPTABLE(YOP) and later.
If an LG instruction with a long displacement is executed on an original
z900, the wrong doubleword will be loaded because the long-displacement byte
is ignored.  This is only a problem if your code needs to run on the
original z900 in addition to later systems.

On Sun, 17 Oct 2010 14:35:59 -0400, Ian Worthington wrote:
>We have some programs that need to support Y ops.  I was planning to just
>switch the whole product to assemble with optable(yop) but I found PJ30456
>which includes the unsettling comment:
>
>New instructions must be assembled using the YOP instruction set on LINUX
>HLASM. The rest of the system is assembled against the ZOP instruction set
>>>> to avoid the use of long displacements. <<<
>
>Would this simply be so that the rest of the system would run on hardware
>without the long displacement facility (I assume this is a microcode
>level?), or is there some more serious issue I should be aware of?

Reply via email to