This is the mail archive of the
mailing list for the binutils project.
Re: optimization by as
- From: <Paul_Koning at Dell dot com>
- To: <y dot gribov at samsung dot com>
- Cc: <kumarvir dot pathak at gmail dot com>, <Andrew dot Bennett at imgtec dot com>, <binutils at sourceware dot org>
- Date: Mon, 17 Aug 2015 14:37:15 +0000
- Subject: Re: optimization by as
- Authentication-results: sourceware.org; auth=none
- References: <CAEDvCBS2RdGBwpirseB5Bne1_tOw=68O-5V9Q-S+AmZM7+vWog at mail dot gmail dot com> <0DA23CC379F5F945ACB41CF394B982772110532C at LEMAIL01 dot le dot imgtec dot org> <CAEDvCBS4m4UkNo+XcAPLZ7i9PYdV3XSp-XxGUvoEvHN9RWEnfQ at mail dot gmail dot com> <693C75B5-88BC-4051-BA12-57617578566B at dell dot com> <55D1A974 dot 9090507 at samsung dot com>
> On Aug 17, 2015, at 5:29 AM, Yury Gribov <email@example.com> wrote:
> On 08/10/2015 05:53 PM, Paul_Koning@Dell.com wrote:
>>> On Aug 10, 2015, at 2:41 AM, Virendra Kumar Pathak <firstname.lastname@example.org> wrote:
>>> Hi Andrew,
>>> Thanks for the reply.
>>> What other types of optimization can be handled by the assembler ?
>>> Are they capable of re-ordering the instructions ?
>>> For example inserting other instruction between two loads (on machine
>>> with one load unit) to avoid pipeline stall.
>> Good assemblers donât do optimization; that is the job of the compiler (or, in the uncommon case of hand-written assembly language, the programmer). The MIPS assembler is an aberration, fortunately a rare one. Note that this âoptimizationâ machinery is turned off by recent compilers when they feed generated code to the assembler, because it gets in the way of the compiler doing a better job.
> AFAIR PS3 assembler was also optimizing (e.g. it could do register allocation and instruction scheduling).
And DECâs Alpha assembler could also do some of that (since it was in fact hacked into the back end of the compiler).
That doesnât affect my conclusion. The normal job (these days) of the assembler is to process compiler output. For that, the compiler is doing the optimizing and it wants the assembler to keep its hands off. In the days of GCC 3, the assembler did some of this stuff, and the result was at best suboptimal if not actually problematic. Now the compiler tells the MIPS assembler to be a good assembler and all is well.
The other (now rare) job of the assembler is to process human-written assembly code. There too it must stay out of the way, because the only time when hand-written assembly code is justified is when the human needs *complete* control over what happens. Iâve seen any number of nasty bugs in MIPS hand-written assembly code (like bootstraps or low level diagnostics) cause by people forgetting to say â.set noreorderâ and whatever other commands are needed to make the MIPS assembler work like a correct assembler.
So in short, I view all âoptimizing assemblersâ as design errors.