http://d.puremagic.com/issues/show_bug.cgi?id=5748



--- Comment #4 from Max Samukha <samu...@voliacable.com> 2011-03-18 00:24:35 
PDT ---
(In reply to comment #0)
> I think that the "naked" that currently is usable inside asm blocks is a
> property of the whole function that contains the asm block and not just of the
> asm block, so I suggest to deprecate (and later remove) the "naked" and to add
> a @naked function annotation.
> 
> An example, from (from dmd\src\druntime\src\core\thread.d):
> 
> 
> version( D_InlineAsm_X86 ) {
>     static void* getBasePtr() {
>         asm {
>             naked;
>             mov EAX, EBP;
>             ret;
>         }
>     }
> 
>     obj.m_main.bstack = getBasePtr();
> } else version( D_InlineAsm_X86_64 ) {
>     static void* getBasePtr() {
>         asm {
>             naked;
>             mov RAX, RBP;
>             ret;
>         }
>     }
> 
>     obj.m_main.bstack = getBasePtr();
> }
> 
> 
> To:
> 
> version( D_InlineAsm_X86 ) {
>     @naked static void* getBasePtr() {
>         asm {
>             mov EAX, EBP;
>             ret;
>         }
>     }
> 
>     obj.m_main.bstack = getBasePtr();
> } else version( D_InlineAsm_X86_64 ) {
>     @naked static void* getBasePtr() {
>         asm {
>             mov RAX, RBP;
>             ret;
>         }
>     }
> 
>     obj.m_main.bstack = getBasePtr();
> }

(In reply to comment #3)
> (In reply to comment #2)
> > Should an attribute be necessarily part of function interface? MSVC uses
> > __declspec(naked), which is not part of the function interface
> > (http://msdn.microsoft.com/en-us/library/h5w10wxs%28v=vs.80%29.aspx). Also, 
> > the
> > GNU compiler uses __attribute__((naked)). Having "naked" in the assembly 
> > block
> > has never felt right, really.
> 
> Naked is an internal characteristic of a function, not an external one. It
> simply does not belong in the declaration, despite the existence of poorly
> designed extensions in other languages.
> 

But it is still a function characteristic and it definitely doesn't belong in
the assembly block, so I think "poorly designed" applies to D as well.

> Think of it this way - is it a good design to have to change your header files
> if you change your implementation?

You do not need to change header files with MSVC because the attribute is
permitted only in the function definition.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------

Reply via email to