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?