Steve, all,

I am familiar with that coding technique. 
It changes instructions in storage, if that code
happens to be in the I-cache, there is invalidation.

I'm not sure whether that affects just the line,
it could be the entire I-cache.
The pipeline may get flushed, I'm not sure.

It might vary from one processor generation
to the next.
I'd say: change habit - allocate a flag bit or byte.
Leave your code alone. Treat as read-only.

Kind regards,
Abe Kornelis
==========


On 19/08/2025 20:52, Steve Thompson wrote:
> I have been reading through this from the bottom and hadn't seen any
> mention of the following:
>
> At one shop I was in as a developer, we had a macro that would EX an
> MVC so that it would be variable.
>
> We had a macro that depended on execution time arithmetic to do x MVCs
> and end with an EX of an MVC to take the place of an MVCL. We found
> that it was faster to do 4 MVCs than an MVCL. So if the length to be
> moved was greater than 1024 bytes, we did the MVCL, otherwise....
>
> OTOH, at the last shop I was in, B and NOP instructions were modified
> by EX to make them NOP or B. And it seemed like this was the STD way
> to handle logic for switching from processing one type of record to
> another.
>
> So here is the question for the hard core types: With z/Arch, might
> this cause a processor stall because of a cache line of code having
> been changed since that line was fetched? And how much of a delay
> could this cause?
>
> -- Regards,
> Steve Thompson
> Make Mainframes Great Again
> They use far less Electricity than Clouds and can do more work
>
> On 8/4/2025 2:04 PM, Dan Greiner wrote:
>> As to my original query, I was wondering to what extent anyone might
>> use EX (or EXRL) to alter the actual target instruction. Yves gave an
>> intriguing reply where a value of 0, 1, or 2 in the R1 field of EX
>> could alter its target instruction from SAM24, SAM31, or SAM64. In
>> this case, it's clever and efficient. However, perhaps a more
>> understandable technique might be to use EX with an index register
>> that identified the actual instruction to be executed.
>>
>> The CPU designers have a long love/hate relationship with
>> execute-type instructions (tending towards hate). As to whether they
>> and the architects envisioned that EX could be used to modify the
>> target opcode ... undoubtedly they did. Perhaps they could have
>> designed it such that if the R1 field modified a target opcode, an
>> exception could be recognized ... but they didn't. I'm just trying to
>> understand whether anyone (other than Yves) actually uses this.
>>
>> As to the history of opcodes stretching beyond the first 8 bits: the
>> original S/360 architecture had about 150 instructions defined, so
>> there was room for another 100-or-so one byte opcodes to be defined
>> without going beyond one byte. The first instance of opcodes creeping
>> beyond bits 0-7 of the instruction showed up later in the S/360
>> architecture. Originally, the HALT IO (HIO) instruction  was defined
>> as opcode 9E hex, with bits 8-15 reserved. Its opcode was
>> subsequently redefined as 9E00 hex, and HALT DEVICE (HDV) was defined
>> as 9E01 hex.
>>
>> It wasn't until the S/370 architecture (circa 1970) that major
>> infestation of bits 8-15 occurred with the advent of the RRE-, S-,
>> SSE-format instructions. The vast majority of these were privileged
>> or semi-privileged instructions, with a few exceptions like SET
>> SYSTEM MASK (SSM), STORE CLOCK (STCK), and TEST AND SET (TS) that
>> were unprivileged. (SSM and TS were reclassified to S format from
>> their original SI format in S/360).
>>
>> 370/XA (circa 1983) introduced the E-format instruction – an
>> instruction format with just 16 bits of opcode and nothing else – for
>> the UPDATE TREE (UPT) instruction (as if UPT was going to be coded so
>> frequently that it warranted a special format to save code space ...
>> not the brightest architecture IMHO).
>>
>> Somewhere between ESA/370 and ESA/390, the
>> immediate-and-relative-instruction facility came along that
>> introduced the RIL format in which the opcode was split between bits
>> 0-7 and 12-15. This provided significant enhancements with relative
>> (to the PSW instruction address) storage operands and 16-bit
>> immediate operands.
>>
>> A bit later in the ESA/390 time frame came the RXE and RXF formats, a
>> 6-byte instruction where the opcode was split between the first and
>> last byte (i.e., bits 0-7 and 40-47). These were used for binary
>> floating point instructions and for some z/Architecture ops that were
>> retrofit to ESA/390. Also in later ESA/390 time frame came RSE and
>> RSL formats with similar opcode split. These provided such "features"
>> as COMPARE LOGICAL LONG UNICODE (CLCLU), MOVE LONG UNICODE (MVCLU),
>> and ROTATE LEFT SINGLE LOGICAL (RLL).
>>
>> z/Architecture flooded the architecture with gobs more instructions
>> in which the opcode extended beyond bits 0-7.  For a great overview
>> of the instruction formats, see Figure 5-1 in the latest PoO.
>
> -- Regards,
> Steve Thompson
> Make Mainframes Great Again They use far less Electricity than Clouds
> and can do more work

Reply via email to