[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