If they are documented that way then it's legitimate, and, as you note, it 
provides more information then the assembler equivalent.

IBM's current compilers for C, COBOL and PL/I use a common back end; the last I 
heard, IBM was not using that back end for Ada or FORTRAN, although those may 
no longer be supported. I would have expected them to use peephole optimization 
by now.


--
Shmuel (Seymour J.) Metz
http://mason.gmu.edu/~smetz3

________________________________________
From: IBM Mainframe Assembler List [ASSEMBLER-LIST@LISTSERV.UGA.EDU] on behalf 
of Bernd Oppolzer [bernd.oppol...@t-online.de]
Sent: Friday, November 12, 2021 2:58 AM
To: ASSEMBLER-LIST@LISTSERV.UGA.EDU
Subject: Re: Curious compiler optimization

This is the usual way the generated statements are documented in the
pseudo assembly listings since (I think) 20 years now, no matter if the
compiler
is C, PL/1 or COBOL (don't know about others).

The shown ASSEMBLER code would not work, of course, but it shows the
variable
or structure names AND the offsets and base registers (sometimes other
information
like the name of intenal compiler work areas, control blocks etc.). What
the
"pseudo" assembly listing does: trying to put as much information as
possible
into the pseudo assembly notation, while still showing what the original
machine instruction
looks like. IMO, this "pseudo" notation is a clever solution, and: it is
not an error.

This said: most Windows etc. based compilers don't even have a compiler
listing;
at least it is completely uncommon to use it there.

Kind regards

Bernd



Am 12.11.2021 um 03:46 schrieb Seymour J Metz:
> If that were assembler source it would be invalid, but IBM uses various 
> pseudo-assembler formats in their compiler listings.
> It's confusing and ugly, but unless IBM documents a different format it's 
> probably Broken As Designed (BAD).
>
>
> --
> Shmuel (Seymour J.) Metz
> http://mason.gmu.edu/~smetz3
>
>
>
>
> With NOOPT:
>
> *  int var = 0;
>
>       LA   r4,0
>       LR   r0,r4
>       ST   r0,var(,r13,160)
>
> And I'm unclear what
>
> var(,r13,160)
>
> is supposed to be-the actual generated opcodes are
>
> 5000  D0A0
>
> Which makes sense. Feels like there's an extra comma in there and an extra 
> offset. Maybe this is the compiler's way of saying "This is tinkering with 
> var, which is at offset 160"? I.e., it explicitly mentions both the variable 
> name and the 160 for readability?
>

Reply via email to