[Ffmpeg-devel] [PATCH] wrong use of ff_get_fourcc in mpjg.c

Reimar Döffinger Reimar.Doeffinger
Wed Feb 7 18:00:00 CET 2007


Hello,
On Wed, Feb 07, 2007 at 01:45:25PM -0000, M?ns Rullg?rd wrote:
> Reimar Doeffinger said:
[...]
> > AV_RB32 etc. in general when there are optimized variants maybe not, but a macro
> > that expands to
> > ("ABCD")[0] | (("ABCD")[1] << 8) ...
> > I'd expect to resolve to a constant...
> 
> Well, it doesn't.  Believe me, I've tried it.

Maybe your info is outdated?
It does for me with gcc 4.1.1 and starting from -O1.
program:
int main(int argc, char *argv[]) {
#define TAG(s) ((s)[0] | ((s)[1] << 8) | ((s)[2] << 16) | ((s)[3] <<
24))
  int t = TAG(argv[0]);
  return t == TAG("test");
}

generated asm (64 bit mode, -O1):
  400498:       48 8b 0e                mov    (%rsi),%rcx
  40049b:       0f be 31                movsbl (%rcx),%esi
  40049e:       0f be 41 01             movsbl 0x1(%rcx),%eax
  4004a2:       c1 e0 08                shl    $0x8,%eax
  4004a5:       09 c6                   or     %eax,%esi
  4004a7:       0f be 51 02             movsbl 0x2(%rcx),%edx
  4004ab:       c1 e2 10                shl    $0x10,%edx
  4004ae:       0f be 41 03             movsbl 0x3(%rcx),%eax
  4004b2:       c1 e0 18                shl    $0x18,%eax
  4004b5:       09 c2                   or     %eax,%edx
  4004b7:       09 d6                   or     %edx,%esi
  4004b9:       81 fe 74 65 73 74       cmp    $0x74736574,%esi
  4004bf:       0f 94 c0                sete   %al
  4004c2:       0f b6 c0                movzbl %al,%eax

Greetings,
Reimar D?ffinger




More information about the ffmpeg-devel mailing list