Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #127417

Re: Compile Assembly and C files together

From David Brown <david.brown@hesbynett.no>
Newsgroups comp.lang.c
Subject Re: Compile Assembly and C files together
Date 2018-03-07 12:17 +0100
Organization A noiseless patient Spider
Message-ID <p7ohnt$po$1@dont-email.me> (permalink)
References (3 earlier) <20180306145910.01512e6b@Mars> <p7mcge$oci$1@dont-email.me> <09640d63-f1b3-43c5-970d-4ac66db41cf3@googlegroups.com> <hrznC.15256$5c2.6550@fx09.am4> <slrnp9tmm0.eu5.grahn+nntp@frailea.sa.invalid>

Show all headers | View raw


On 06/03/18 19:15, Jorgen Grahn wrote:
> On Tue, 2018-03-06, bartc wrote:
>> On 06/03/2018 15:57, supercat@casperkitty.com wrote:
>>> On Tuesday, March 6, 2018 at 9:35:52 AM UTC-6, David Brown wrote:
>>>> On 06/03/18 15:59, Rob Morley wrote:
>>>>> That's handy.  Although the last time I wrote any assembler was about
>>>>> 20 years ago, I still might ...
>>>>>
>>>>
>>>> It is not good advice.  At best it gives you a very limited idea of the
>>>> calling conventions and registers usage.  If you really want to write
>>>> pure assembly functions that interact with code in other languages, you
>>>> have to read up on the calling conventions and ABI for the target (and,
>>>> if it is Windows, for the compiler you are using - the ABI is not
>>>> standardised on Windows).
>>>>
>>>> If you are using gcc (or clang, or icc, or a few other compilers) and
>>>> you are writing short pieces of assembly, you would be better off
>>>> learning about gcc's inline assembly support.  Then the compiler takes
>>>> care of all the interface between the assembly and C.
>>>
>>> If one needs to use a small assembly-language routine to accomplish some
>>> purpose, and won't be writing a lot of assembly language on the development
>>> system, letting a compiler generate a stub function for e.g.
>>>
>>>      extern volatile void*pp1,*pp2;
>>>      extern volatile int nn;
>>>
>>>      long multiply_accumulate(void *p1, void *p2, int n)
>>>      {
>>>        pp1 = p1;
>>>        pp2 = p2;
>>>        nn = n;
>>>        return nn;
>>>      }
>>>
>>> and then editing in the actual machine instructions one needs, along with
>>> a human-readable prologue etc. is apt to be much faster than reading through
>>> all of the documentation to find out everything the development system will
>>> need.  If one ensures that one saves and restores any registers or CPU state
>>> that one disturbs, and sets any CPU states upon which one relies, this
>>> approach should be safe.  Reading the documentation may allow one to avoid
>>> redundantly saving/restoring state that calling code would never rely upon,
>>> but if the machine code is either being used to fully encapsulate a time-
>>> critical loop, or is used to accomplish some non-time-critical task that
>>> C simply can't do, saving/restoring extra state should be harmless.
>>
>> This is the method I've played with for tweaking code on the ARM32 where 
>> I wasn't familiar with the assembly code.
>>
>> (And also what I had once planned to use to optimise an interpreter for 
>> ARM32: create a module with a set of 200 functions in C which are 
>> wrappers around the the byte-code handlers proper in another module.
>>
>> To start with, each wrapper just calls the regular function. But by 
>> generating the .s file (compiled with -S, and -O0 to ensure no funny 
>> business), I can optimise selected functions in the assembly file, and 
>> do that incrementally to get better performance. I can also try and keep 
>> essential variables in global registers.
>>
>> However I never got round to it as I don't use ARM64 enough.)
>>
>> The important thing though is not to let gcc optimise the code.
> 
> Why?  The optimization level cannot change the calling conventions, or
> you'd need a copy of e.g. the standard library for each optimization
> setting.
> 

Perhaps he just wants to make poorer quality code from the compiler, so
that he can pretend the hand-made assembly is better?  Maybe he doesn't
want to read the documentation, and learn how to integrate assembly with
the compiler generation?  A key point is that if you call assembly code
from the C code, the assembly has to follow the rules of C regarding
which data can be accessed, and it has to follow the rules of the
compiler (or target ABI) regarding register usage.  If you have the
compiler in "dumb translator" mode then you can be more flexible, as the
compiler does not take advantage of its knowledge of data and control flow.

Of course, doing this is very fragile - especially as gcc is not a "dumb
translator" even with no optimisation enabled.  But some people seem to
think they can use such techniques instead of learning about how to do
it correctly.

Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Compile Assembly and C files together Ilias Abrams <iliasabrams@gmail.com> - 2018-03-05 08:23 -0800
  Re: Compile Assembly and C files together "Mr. Man-wai Chang" <toylet.toylet@gmail.com> - 2018-03-06 19:20 +0800
    Re: Compile Assembly and C files together druck <news@druck.org.uk> - 2018-03-06 13:53 +0000
      Re: Compile Assembly and C files together Rob Morley <nospam@ntlworld.com> - 2018-03-06 14:59 +0000
        Re: Compile Assembly and C files together David Brown <david.brown@hesbynett.no> - 2018-03-06 16:35 +0100
          Re: Compile Assembly and C files together supercat@casperkitty.com - 2018-03-06 07:57 -0800
            Re: Compile Assembly and C files together bartc <bc@freeuk.com> - 2018-03-06 16:35 +0000
              Re: Compile Assembly and C files together Jorgen Grahn <grahn+nntp@snipabacken.se> - 2018-03-06 18:15 +0000
                Re: Compile Assembly and C files together bartc <bc@freeuk.com> - 2018-03-06 18:51 +0000
                Re: Compile Assembly and C files together Jorgen Grahn <grahn+nntp@snipabacken.se> - 2018-03-06 19:22 +0000
                Re: Compile Assembly and C files together bartc <bc@freeuk.com> - 2018-03-06 19:30 +0000
                Re: Compile Assembly and C files together supercat@casperkitty.com - 2018-03-06 12:31 -0800
                Re: Compile Assembly and C files together scott@slp53.sl.home (Scott Lurndal) - 2018-03-06 23:05 +0000
                Re: Compile Assembly and C files together David Brown <david.brown@hesbynett.no> - 2018-03-07 12:17 +0100
                Re: Compile Assembly and C files together Jorgen Grahn <grahn+nntp@snipabacken.se> - 2018-03-07 16:05 +0000
                Re: Compile Assembly and C files together bartc <bc@freeuk.com> - 2018-03-07 16:45 +0000
                Re: Compile Assembly and C files together David Brown <david.brown@hesbynett.no> - 2018-03-07 17:54 +0100
                Re: Compile Assembly and C files together Jorgen Grahn <grahn+nntp@snipabacken.se> - 2018-03-07 16:59 +0000
                Re: Compile Assembly and C files together bartc <bc@freeuk.com> - 2018-03-07 17:13 +0000
              Re: Compile Assembly and C files together David Brown <david.brown@hesbynett.no> - 2018-03-07 12:26 +0100
                Re: Compile Assembly and C files together bartc <bc@freeuk.com> - 2018-03-07 14:25 +0000
                Re: Compile Assembly and C files together David Brown <david.brown@hesbynett.no> - 2018-03-07 15:57 +0100
                Re: Compile Assembly and C files together scott@slp53.sl.home (Scott Lurndal) - 2018-03-07 15:24 +0000
                Re: Compile Assembly and C files together David Brown <david.brown@hesbynett.no> - 2018-03-07 17:56 +0100
            Re: Compile Assembly and C files together David Brown <david.brown@hesbynett.no> - 2018-03-07 11:37 +0100
              Re: Compile Assembly and C files together bartc <bc@freeuk.com> - 2018-03-07 13:11 +0000
                Re: Compile Assembly and C files together David Brown <david.brown@hesbynett.no> - 2018-03-07 15:47 +0100
                Re: Compile Assembly and C files together Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2018-03-07 07:31 -0800
                Re: Compile Assembly and C files together bartc <bc@freeuk.com> - 2018-03-07 21:00 +0000
                Re: Compile Assembly and C files together David Brown <david.brown@hesbynett.no> - 2018-03-08 12:33 +0100
                Re: Compile Assembly and C files together bartc <bc@freeuk.com> - 2018-03-08 13:05 +0000
                Re: Compile Assembly and C files together David Brown <david.brown@hesbynett.no> - 2018-03-08 15:14 +0100
                Re: Compile Assembly and C files together bartc <bc@freeuk.com> - 2018-03-08 15:23 +0000
                Re: Compile Assembly and C files together David Brown <david.brown@hesbynett.no> - 2018-03-08 23:22 +0100
                Re: Compile Assembly and C files together supercat@casperkitty.com - 2018-03-08 14:40 -0800
                Re: Compile Assembly and C files together Ben Bacarisse <ben.usenet@bsb.me.uk> - 2018-03-08 23:59 +0000
                Re: Compile Assembly and C files together supercat@casperkitty.com - 2018-03-08 16:54 -0800
                Re: Compile Assembly and C files together David Brown <david.brown@hesbynett.no> - 2018-03-09 10:37 +0100
                Re: Compile Assembly and C files together Ben Bacarisse <ben.usenet@bsb.me.uk> - 2018-03-09 10:47 +0000
                Re: Compile Assembly and C files together supercat@casperkitty.com - 2018-03-09 09:19 -0800
                Re: Compile Assembly and C files together David Brown <david.brown@hesbynett.no> - 2018-03-09 10:23 +0100
                Re: Compile Assembly and C files together bartc <bc@freeuk.com> - 2018-03-09 12:28 +0000
                Re: Compile Assembly and C files together David Brown <david.brown@hesbynett.no> - 2018-03-09 16:43 +0100
                Re: Compile Assembly and C files together bartc <bc@freeuk.com> - 2018-03-09 17:14 +0000
                Re: Compile Assembly and C files together supercat@casperkitty.com - 2018-03-09 09:32 -0800
                Re: Compile Assembly and C files together scott@slp53.sl.home (Scott Lurndal) - 2018-03-08 15:26 +0000
                Re: Compile Assembly and C files together Jorgen Grahn <grahn+nntp@snipabacken.se> - 2018-03-08 19:23 +0000
                Re: Compile Assembly and C files together David Brown <david.brown@hesbynett.no> - 2018-03-08 23:27 +0100
                Re: Compile Assembly and C files together bartc <bc@freeuk.com> - 2018-03-08 16:17 +0000
                Re: Compile Assembly and C files together David Brown <david.brown@hesbynett.no> - 2018-03-08 23:47 +0100
                Re: Compile Assembly and C files together bartc <bc@freeuk.com> - 2018-03-09 11:59 +0000
              Re: Compile Assembly and C files together supercat@casperkitty.com - 2018-03-07 09:13 -0800
                Re: Compile Assembly and C files together scott@slp53.sl.home (Scott Lurndal) - 2018-03-07 17:42 +0000
                Re: Compile Assembly and C files together supercat@casperkitty.com - 2018-03-07 10:55 -0800
      Re: Compile Assembly and C files together "Mr. Man-wai Chang" <toylet.toylet@gmail.com> - 2018-03-06 23:01 +0800
    Re: Compile Assembly and C files together ray carter <ray@zianet.com> - 2018-03-06 15:44 +0000
      Re: Compile Assembly and C files together "Mr. Man-wai Chang" <toylet.toylet@gmail.com> - 2018-03-07 00:07 +0800
        Re: Compile Assembly and C files together Tauno Voipio <tauno.voipio@notused.fi.invalid> - 2018-03-07 22:39 +0200
          Re: Compile Assembly and C files together "Mr. Man-wai Chang" <toylet.toylet@gmail.com> - 2018-03-08 18:18 +0800
            Re: Compile Assembly and C files together Martin Gregorie <martin@mydomain.invalid> - 2018-03-08 12:37 +0000
              Re: Compile Assembly and C files together Martin Gregorie <martin@mydomain.invalid> - 2018-03-08 13:13 +0000
                Re: Compile Assembly and C files together The Natural Philosopher <tnp@invalid.invalid> - 2018-03-08 13:34 +0000
                Re: Compile Assembly and C files together Martin Gregorie <martin@mydomain.invalid> - 2018-03-08 15:27 +0000
                Re: Compile Assembly and C files together mm0fmf <none@invalid.com> - 2018-03-08 17:33 +0000
                Re: Compile Assembly and C files together The Natural Philosopher <tnp@invalid.invalid> - 2018-03-09 09:06 +0000
                Re: Compile Assembly and C files together Richard Kettlewell <invalid@invalid.invalid> - 2018-03-09 09:17 +0000
                Re: Compile Assembly and C files together The Natural Philosopher <tnp@invalid.invalid> - 2018-03-09 09:30 +0000
                Re: Compile Assembly and C files together Tauno Voipio <tauno.voipio@notused.fi.invalid> - 2018-03-09 15:56 +0200
                Re: Compile Assembly and C files together bartc <bc@freeuk.com> - 2018-03-09 14:13 +0000
                Re: Compile Assembly and C files together Dennis Lee Bieber <wlfraed@ix.netcom.com> - 2018-03-09 11:14 -0500
                Re: Compile Assembly and C files together The Natural Philosopher <tnp@invalid.invalid> - 2018-03-09 17:44 +0000
                Re: Compile Assembly and C files together David Brown <david.brown@hesbynett.no> - 2018-03-09 17:16 +0100
                Re: Compile Assembly and C files together Robert Wessel <robertwessel2@yahoo.com> - 2018-03-09 11:19 -0600
                Re: Compile Assembly and C files together bartc <bc@freeuk.com> - 2018-03-09 18:11 +0000
                Re: Compile Assembly and C files together Robert Wessel <robertwessel2@yahoo.com> - 2018-03-09 13:41 -0600
                Re: Compile Assembly and C files together supercat@casperkitty.com - 2018-03-09 10:12 -0800
                Re: Compile Assembly and C files together David Brown <david.brown@hesbynett.no> - 2018-03-09 19:20 +0100
                Re: Compile Assembly and C files together supercat@casperkitty.com - 2018-03-09 11:45 -0800
                Re: Compile Assembly and C files together Robert Wessel <robertwessel2@yahoo.com> - 2018-03-09 13:48 -0600
                Re: Compile Assembly and C files together Dennis Lee Bieber <wlfraed@ix.netcom.com> - 2018-03-09 13:16 -0500
                Re: Compile Assembly and C files together scott@slp53.sl.home (Scott Lurndal) - 2018-03-09 18:29 +0000
                Re: Compile Assembly and C files together Jack Fearnley <jack@alcor.concordia.ca> - 2018-03-09 19:07 +0000
                Re: Compile Assembly and C files together scott@slp53.sl.home (Scott Lurndal) - 2018-03-09 19:13 +0000
                Re: Compile Assembly and C files together Michael J. Mahon <mjmahon@aol.com> - 2018-03-10 13:16 -0600
                Re: Compile Assembly and C files together Martin Gregorie <martin@mydomain.invalid> - 2018-03-11 19:39 +0000
                Re: Compile Assembly and C files together Michael J. Mahon <mjmahon@aol.com> - 2018-03-12 01:16 -0500
                Re: Compile Assembly and C files together Martin Gregorie <martin@mydomain.invalid> - 2018-03-12 20:49 +0000
                Re: Compile Assembly and C files together scott@slp53.sl.home (Scott Lurndal) - 2018-03-12 16:11 +0000
                Re: Compile Assembly and C files together Michael J. Mahon <mjmahon@aol.com> - 2018-03-12 14:58 -0500
                Re: Compile Assembly and C files together scott@slp53.sl.home (Scott Lurndal) - 2018-03-12 20:38 +0000
                Re: Compile Assembly and C files together scott@slp53.sl.home (Scott Lurndal) - 2018-03-12 16:06 +0000
                Re: Compile Assembly and C files together Michael J. Mahon <mjmahon@aol.com> - 2018-03-12 14:58 -0500
                Re: Compile Assembly and C files together Tauno Voipio <tauno.voipio@notused.fi.invalid> - 2018-03-09 21:27 +0200
                Re: Compile Assembly and C files together The Natural Philosopher <tnp@invalid.invalid> - 2018-03-09 17:40 +0000
                Re: Compile Assembly and C files together Tauno Voipio <tauno.voipio@notused.fi.invalid> - 2018-03-09 21:30 +0200
                Re: Compile Assembly and C files together Richard Damon <Richard@Damon-Family.org> - 2018-03-09 13:16 -0500
                Re: Compile Assembly and C files together Tauno Voipio <tauno.voipio@notused.fi.invalid> - 2018-03-09 21:33 +0200
                Re: Compile Assembly and C files together mm0fmf <none@invalid.com> - 2018-03-09 17:40 +0000
                Re: Compile Assembly and C files together The Natural Philosopher <tnp@invalid.invalid> - 2018-03-09 17:47 +0000
                Re: Compile Assembly and C files together mm0fmf <none@invalid.com> - 2018-03-09 18:05 +0000
                Re: Compile Assembly and C files together The Natural Philosopher <tnp@invalid.invalid> - 2018-03-09 09:05 +0000
                Re: Compile Assembly and C files together Tauno Voipio <tauno.voipio@notused.fi.invalid> - 2018-03-09 16:01 +0200
            Re: Compile Assembly and C files together Tauno Voipio <tauno.voipio@notused.fi.invalid> - 2018-03-08 17:25 +0200
    Re: Compile Assembly and C files together The Natural Philosopher <tnp@invalid.invalid> - 2018-03-07 07:36 +0000
  Re: Compile Assembly and C files together Richard Kettlewell <invalid@invalid.invalid> - 2018-03-06 15:29 +0000
    Re: Compile Assembly and C files together David Brown <david.brown@hesbynett.no> - 2018-03-06 16:38 +0100

csiph-web