[Rpcemu] Code review
rpcemu-list at howkins.me.uk
Tue Feb 21 11:30:39 PST 2012
> In function SWPWord() of ArmDynarecOps.h line 343
> is "addr=armregs[RN]&~3;"
> while the corresponding line 925 in arm.c is "addr=armregs[RN];".
> I think the dynamic version is the correct one.
I don't think either of those is correct, but they will be wrong only when
the address is not aligned. According to the ARM ARM unaligned addresses
should be rotated like LDR. I will look to incorporate this change in the
> I have also looked at the file codegen_x86.c.
> The function generateshiftflags() seems to be mishandling the C flag
> (at least if the comments match te actual opcodes used).
> According to te Acorn Assembler book and what I see in arm.c
> the flag C is left untouched if no shift occurs
> and flags NZV are always left untouched.
> This means that code should look like :
> /*MOVB *pcpsr,%cl*/
> if (no shift)
> do nothing
> /*AND $ZFLAG+NFLAG,%cl*/
> do shift
> /*JNC nocarry*/
> /*OR $CFLAG,%cl*/
> In the code it seems that flag C is always set to 0 if no shift occurs
> and when a shift occurs it is sometimes set to 1 but never reset to 0.
I agree, this looks wrong to me as well. The C flag is being modified in
situations when it should be preserved. Again, I will look to apply a fix
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Rpcemu