[GHC] #16328: NCG: Only adjust al before foreign calls if required.

GHC ghc-devs at haskell.org
Sat Feb 16 01:17:59 UTC 2019


#16328: NCG: Only adjust al before foreign calls if required.
-------------------------------------+-------------------------------------
           Reporter:  AndreasK       |             Owner:  (none)
               Type:  bug            |            Status:  new
           Priority:  low            |         Milestone:
          Component:  Compiler       |           Version:  8.6.3
  (CodeGen)                          |
           Keywords:                 |  Operating System:  Linux
       Architecture:  x86_64         |   Type of failure:  None/Unknown
  (amd64)                            |
          Test Case:                 |        Blocked By:
           Blocking:                 |   Related Tickets:
Differential Rev(s):                 |         Wiki Page:
-------------------------------------+-------------------------------------
 This is a typical sequence for a foreign call (although newCAF is a RTS
 function).

 We zero rax to indicate the number of vector registers used. However this
 is here (and usually) redundant.
 {{{
         subq $8,%rsp
         movq %r13,%rax
         movq %rbx,%rsi
         movq %rax,%rdi
         xorl %eax,%eax
         call newCAF
 }}}


 The xor eax, eax here is redundant

 The System V spec says:

 > For calls that may call functions that use varargs or stdargs
 (prototype-less
 > calls or calls to functions containing ellipsis (...) in the
 declaration) %al is used
 > as hidden argument to specify the number of vector registers used.
 > The contents of %al do not need to match exactly the number of
 registers, but must be an upper bound on the number of vector registers
 used and is in the range 0–8 inclusive.

 This means we can omit the zeroing when we call things like RTS functions
 or memmov which take a fixed number of arguments at least.

 On windows this isn't part of the ABI at all so there we can just omit it
 completely.

 It's not a huge deal. For nofib/fannkuch-redux these xors are ~0,3% of the
 size of the .text segment.
 But it might help with cache in some edge cases.

-- 
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/16328>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list