[FFmpeg-devel] [PATCH] Make DECLARE_ALIGNED macros take array specifiers as separate argument

Måns Rullgård mans
Tue Oct 27 20:25:51 CET 2009


Reimar D?ffinger <Reimar.Doeffinger at gmx.de> writes:

> On Tue, Oct 27, 2009 at 06:01:39PM +0000, M?ns Rullg?rd wrote:
>> Reimar D?ffinger <Reimar.Doeffinger at gmx.de> writes:
>> > On Sun, Oct 18, 2009 at 04:41:09PM +0100, M?ns Rullg?rd wrote:
>> >> Reimar D?ffinger <Reimar.Doeffinger at gmx.de> writes:
>> >> > On Sun, Oct 18, 2009 at 04:19:55PM +0100, Mans Rullgard wrote:
>> >> >> The macro implementation might need the name of the variable being
>> >> >> declared for compiler-specific syntax.  Adding an optional fourth
>> >> >> argument allows us to pass the name and, if present, array specifiers
>> >> >> as separate arguments.
>> >> >
>> >> > Could you be more specific on the syntax? If possible moving the
>> >> > array specifiers just outside the DECLARE_ALIGNED would look nicer IMO.
>> >> 
>> >> I don't think that will work.  It certainly will not work with another
>> >> patch I'm preparing.  What's so bad about this anyway?
>> >
>> > Sorry, old thread.
>> > Bad things about it:
>> > 1) I think it looks quite ugly
>> 
>> I don't.  It is also a prerequisite for compiling FFmpeg with TI
>> compilers.
>
> Don't worry, I wasn't going to object on that grounds, I just considered
> it reason enough to ask if there's an alternative.
> Could you give us an example for the syntax the TI compiler needs?
> In principle I guess it's ok, though checking if someone has a better
> idea can't hurt I'd think...

The following macros will need to be added in appropriate places:

#define AV_PRAGMA(s) _Pragma(#s)

#define DECLARE_ALIGNED(n,t,v,...)                  \
    AV_PRAGMA(DATA_ALIGN(v,n))                      \
    t v __VA_ARGS__ __attribute__((aligned(n)))
#define DECLARE_ASM_CONST(n,t,v,...)                \
    AV_PRAGMA(DATA_ALIGN(v,n))                      \
    static const t v __VA_ARGS__ __attribute__((aligned(n)))

#define LOCAL_ALIGNED(a, t, v, s, ...)                          \
    uint8_t la_##v[sizeof(t s __VA_ARGS__) + (a)];              \
    t (*v) __VA_ARGS__ = (void *)FFALIGN((uintptr_t)la_##v, a)

The last one will have to be used for local vars needing alignment.
This is needed with gcc too on some platforms.

-- 
M?ns Rullg?rd
mans at mansr.com



More information about the ffmpeg-devel mailing list