home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   comp.lang.asm.x86      Ahh, the lost art of x86 assembly      4,675 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 2,970 of 4,675   
   Alex to Alex   
   Re: 64 bit stack alignment   
   29 Aug 17 19:00:09   
   
   From: alex@nospicedham.rivadpm.com   
      
   On 29-Aug-17 18:06, Alex wrote:   
   > The only thing I can think of that doesn't involve branching is an   
   > algorithm like this (completely untested, and I'm using r15 as an   
   > arbitrarily chosen register, it can be changed to any other reg):   
   >   
   >       xor     r15,r15   
   >       test    rsp,0Fh         ; See if we're already aligned   
   >       setnz   r15b            ; Set to 0 or 1 based on   
   alignment   
   >       shl     r15,3           ; Multiply by 8   
   >       sub     rsp,r15         ; Adjust rsp by 0 or 8   
   >       call    funkychicken    ; Perform the normal call   
   >       add     rsp,r15         ; Un-adjust rsp by 0 or 8   
   >   
   > Note also that this has the effect of pushing your parameters up   
   > on the stack an additional 8-bytes, so you may need to do this   
   > first ... I don't know.  I've always kept the stack 8-byte aligned   
   > and everything worked, so I'm not really sure what you're doing   
   > here.   
      
   OK, at the cost of a register (preferably one that doesn't get   
   scratched, which makes R15 OK) we could do   
      
          mov   r15 esp   
          sub   esp $10  ; 16 decimal   
          and   spl $F0   
          call  dotheconga   
          mov   rsp r15	   
      
   --   
   Alex   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca