This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
Re: Force inline without -O2
- From: Ian Lance Taylor <iant at google dot com>
- To: isuru herath <isuru81 at yahoo dot com>
- Cc: gcc-help at gcc dot gnu dot org
- Date: Tue, 22 Dec 2009 09:55:20 -0800
- Subject: Re: Force inline without -O2
- References: <319433.33067.qm@web56001.mail.re3.yahoo.com>
isuru herath <isuru81@yahoo.com> writes:
> I am writing a C code with inline method.
>
> static inline unsigned int READ()
> {
> unsigned long data;
> asm volatile ("movl %%eax, %0" : "=g" (data) : );
> return (unsigned int) data;
> }
>
> I dont want to this appear as a method call in the executable. I want to
> make in inlined to the code. I tried different methods.
>
> 1. I compiled with -finline-functions. Still it apears as a method call in
> the assembly generated.
>
> 2. Used the attribute __attribute__((always_inline));. Still it appears as
> a method call.
>
> But when I compiled with -O2 it doesnot make it a method call. But for my
> current work I cannot have optimizations enabled. Therefore I am looking
> for a way to inline this function in the assembly generated. I am not sure
> I can achieve this behavior with macros since I need to return data from
> it.
The compiler generally does not inline functions if you are not
optimizing.
If you must have this be inline even when not optimizing, I think you
will need to use a macro.
#define READ() \
({ \
unsigned long data; \
asm volatile ("movl %%eax, %0", : "=g" (data)); \
data; \
})
Ian