Hello, > Most likely it's rotated on x86 and hardly shifted on ARM, damn compilers. No, it's not compilers, it's intel's "shr" instruction behavior: it masks bit count lower 5 bits, thus making 33 effectively 1. Corresponding ARM instruction most likely does true 33 bit shift giving you zero result.
Regards, Ruslan PS I didn't look at types your patch works on, but be careful to not mess up 64 bit types this way. On Thu, Jul 19, 2012 at 11:49 PM, André Hentschel <n...@dawncrow.de> wrote: > maybe it's some braindamage by me, but when i is greater or equal to 32 a > shift of HighPart by e.g. 33 doesn't make much sense. For some reason this > works on x86 but not on ARM. Most likely it's rotated on x86 and hardly > shifted on ARM, damn compilers. > If i'm right i don't want to know how much places there are in Wine with > assumptions like this, i'll most likely find them with the testsuite on ARM, > but i's quite hard to get to the point where you see them... > --- > dlls/fusion/assembly.c | 6 +++--- > 1 files changed, 3 insertions(+), 3 deletions(-) > > diff --git a/dlls/fusion/assembly.c b/dlls/fusion/assembly.c > index d04ba73..8e6bfcb 100644 > --- a/dlls/fusion/assembly.c > +++ b/dlls/fusion/assembly.c > @@ -506,7 +506,7 @@ static HRESULT parse_clr_tables(ASSEMBLY *assembly, ULONG > offset) > for (i = 0; i < MAX_CLR_TABLES; i++) > { > if ((i < 32 && (assembly->tableshdr->MaskValid.u.LowPart >> i) & 1) > || > - (i >= 32 && (assembly->tableshdr->MaskValid.u.HighPart >> i) & > 1)) > + (i >= 32 && (assembly->tableshdr->MaskValid.u.HighPart >> > (i-32)) & 1)) > { > assembly->numtables++; > } > @@ -522,7 +522,7 @@ static HRESULT parse_clr_tables(ASSEMBLY *assembly, ULONG > offset) > for (i = 0; i < MAX_CLR_TABLES; i++) > { > if ((i < 32 && (assembly->tableshdr->MaskValid.u.LowPart >> i) & 1) > || > - (i >= 32 && (assembly->tableshdr->MaskValid.u.HighPart >> i) & > 1)) > + (i >= 32 && (assembly->tableshdr->MaskValid.u.HighPart >> > (i-32)) & 1)) > { > assembly->tables[i].rows = assembly->numrows[offidx]; > offidx++; > @@ -534,7 +534,7 @@ static HRESULT parse_clr_tables(ASSEMBLY *assembly, ULONG > offset) > for (i = 1; i < MAX_CLR_TABLES; i++) > { > if ((i < 32 && (assembly->tableshdr->MaskValid.u.LowPart >> i) & 1) > || > - (i >= 32 && (assembly->tableshdr->MaskValid.u.HighPart >> i) & > 1)) > + (i >= 32 && (assembly->tableshdr->MaskValid.u.HighPart >> > (i-32)) & 1)) > { > currofs += get_table_size(assembly, previ) * > assembly->numrows[offidx - 1]; > assembly->tables[i].offset = currofs; > -- > 1.7.4.1 > > > -- > > Best Regards, André Hentschel > > >