Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.programming > #8444
| From | David Brown <david.brown@hesbynett.no> |
|---|---|
| Newsgroups | comp.lang.c, comp.sys.raspberry-pi, comp.programming |
| Subject | Re: Compile Assembly and C files together |
| Date | 2018-03-09 19:20 +0100 |
| Organization | A noiseless patient Spider |
| Message-ID | <p7uj8i$n7g$1@dont-email.me> (permalink) |
| References | (10 earlier) <p7tk7d$r1p$1@dont-email.me> <p7u3qu$v3u$1@dont-email.me> <9EwoC.76436$CL3.51040@fx17.am4> <p7uc0j$du$1@dont-email.me> <o1g5adljtiebbk6gfssr767mvj684phuud@4ax.com> |
Cross-posted to 3 groups.
On 09/03/18 18:19, Robert Wessel wrote: > On Fri, 09 Mar 2018 17:16:19 +0100, David Brown > <david.brown@hesbynett.no> wrote: > >> On 09/03/18 15:13, bartc wrote: <snip> >> Consistent naming would be nice, I agree. > > > Although that's hardly MS's fault. No - it is "for historical reasons". > > >>> /And/ the stack has to be kept at 16-byte alignment, even though >>> individual parameters (the ones that have to go on the stack, and shadow >>> space for the first four), are all 8 bytes each. That is, it needs to be >>> 16-byte aligned just before you execute 'call'. >> >> There are good reasons for having a 16-byte stack alignment. The >> primary ones are to improve cache line alignment, and because some SIMD >> instructions require larger alignment. >> >>> >>> Keeping track of that is a nightmare, and a real problem when writing >>> extensive ASM code that has to make calls to conforming functions. >>> >> >> That's part of the fun of writing assembly code, isn't it? The other >> view is that it is a good reason for programming in C instead of assembly. >> >>> Further (I don't know if this applies to ARM; does it have a separate >>> set of floating point registers?), floating point params need to be >>> passed in a corresponding floating point register instead, XMM0 to XMM3 >>> (here, the names /are/ consistent, and they are consecutive!). For >>> variadic floating point arguments, they need to be passed in both. >>> >>> Phew! And that's the easier Win64 ABI. >>> >>> I guess simplicity of the call convention wasn't a priority. >>> >> >> Well no, of course it was not a priority. Why should it be? Virtually >> no one is interested in the calling conventions - just compiler writers, >> people writing OS context switch routines, and the few dozen people >> writing assembly routines instead of using higher level languages. >> Efficiency of generated code was far and away the priority when AMD made >> the System V AMD64 ABI used by everyone except Windows. $DEITY only >> knows what MS's priorities were when they scrambled it and made >> something pointlessly different and less efficient - the only think I >> can think of was to make implementation of "printf" a little easier for >> the MSVC compiler writers. > > > While I'm not going to try to defend it, MS's explanation is that > there's no cost to actually allocate the spill space (just a change to > the stack adjustment done at entry to the calling function, and the > space is not usually wasted (and thus does not impact caching), > compilers can use it for local variables if they're not going to spill > the first four parameters to that space. And it does, of course, make > the variadic parameter thing easier. That is an interesting view on it - thanks. However, it /will/ have a cost in the case of functions that do not otherwise need to allocate space in the stack other than the automatic push/pop from the call/ret pair. So a small function that could otherwise be run entirely from within the caller-saved registers, but which itself calls another function, will need to allocate stack. This might seem rare, but I am sure it turns up a lot in C++ code with all these functions that don't seem to do anything except pass on responsibility to other functions! > > https://blogs.msdn.microsoft.com/oldnewthing/20160623-00/?p=93735 > > I'm not aware of any good benchmarks comparing the more common > convention and MS's, but if it's actually an issue, it's probable that > the entire function call should be eliminated by some form of inlining > instead. Admittedly there are places where many function calls are > required, but most of the time it's just people computing Fibonacci > numbers or the Ackerman function in poorly thought out benchmarks. >
Back to comp.programming | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
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 "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 David Brown <david.brown@hesbynett.no> - 2018-03-09 19:20 +0100
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 David Taylor <david-taylor@blueyonder.co.uk.invalid> - 2018-03-12 06:39 +0000
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
csiph-web