Hi Tony, thank you for pointing that out. I misread Steve's text.
Apologies for the confusion. Wishing you all great programming days! Abe === On 19/08/2025 21:38, Tony Thigpen wrote: > Abe, > > I did not see anything in Steve's post that indicated truly 'modifying > instructions', just the use of EX which does not technically modify > the instruction. (His wording may have been poor, but he explicitly > said 'by EX'.) > > Tony Thigpen > > Abe Kornelis wrote on 8/19/25 3:31 PM: >> 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 >