[FFmpeg-cvslog] r24926 - trunk/libavcodec/x86/vp56dsp.asm
Måns Rullgård
mans
Thu Aug 26 23:01:23 CEST 2010
Reimar D?ffinger <Reimar.Doeffinger at gmx.de> writes:
> On Thu, Aug 26, 2010 at 09:27:55PM +0100, M?ns Rullg?rd wrote:
>> Reimar D?ffinger <Reimar.Doeffinger at gmx.de> writes:
>> > But in case I was unclear, I actually managed to construct
>> > a case (of course very artificial) that shows the issue
>> > _in principle_ even with non-broken/ancient compilers.
>> >
>> > extern long j;
>> > extern char *array;
>> > int test(void)
>> > {
>> > int i;
>> > int s;
>> > for (i = 0; i < j; i++)
>> > s += array[i];
>> > return s;
>> > }
>> > int test2(void)
>> > {
>> > unsigned i;
>> > int s;
>> > for (i = 0; i < j; i++)
>> > s += array[i];
>> > return s;
>> > }
>> > int test3(void)
>> > {
>> > unsigned long i;
>> > int s;
>> > for (i = 0; i < j; i++)
>> > s += array[i];
>> > return s;
>> > }
>> >
>> > Compiled on PowerPC 64 the three loops are:
>> > .L3:
>> > lbzx 0,9,11
>> > addi 11,11,1
>> > add 0,0,3
>> > extsw 3,0
>> > bdnz .L3
>> >
>> > .L9:
>> > lbzx 9,10,11
>> > addi 0,11,1
>> > rldicl 11,0,0,32
>> > add 9,9,3
>> > cmpd 7,11,8
>> > extsw 3,9
>> > blt 7,.L9
>> >
>> > .L14:
>> > lbzx 0,9,11
>> > addi 11,11,1
>> > add 0,0,3
>> > extsw 3,0
>> > bdnz .L14
>>
>> Yes, the compiler did badly with the 32-bit unsigned counter. What
>> is that supposed to prove?
>
> That it seems like PPC64 also does not have a 32x32->32 addition
It doesn't have _unsigned_ 32-bit addition.
> and just like for x86 a register-size type is the easiest way
> to tell the compiler that no, we really don't care about the
No, the signed 32-bit and unsigned 64-bit gave exactly the same code.
Why do you call one of them easier?
--
M?ns Rullg?rd
mans at mansr.com
More information about the ffmpeg-cvslog
mailing list