qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] softmmu_header: ldb_kernel vs. ldsb_kernel


From: Thiemo Seufer
Subject: Re: [Qemu-devel] softmmu_header: ldb_kernel vs. ldsb_kernel
Date: Tue, 2 Oct 2007 17:50:55 +0100
User-agent: Mutt/1.5.16 (2007-06-11)

Clemens Kolbitsch wrote:
> hi everyone!
> i have a (maybe rather tricky) question:
> 
> why do you define 2 different inline load-functions in softmmu_header:
> 
> static inline int glue(glue(lds, SUFFIX), MEMSUFFIX)(target_ulong ptr)
> 
> vs.
> 
> static inline RES_TYPE glue(glue(ld, USUFFIX), MEMSUFFIX)(target_ulong ptr)
> 
> ??
> 
> Obviously this is for signed/unsigned access... but why do you need it? In 
> case there is a TLB miss, both functions call the same function (e.g. 
> __ldl_mmu) --> the return value cannot differ that much.
> 
> The only difference I see (that really matters) is how the bytes are copied 
> to 
> the result-pointer (i.e. using movzbl vs. movsbl)... but that's it.

It is a cast. The generic C version for the other architectures makes
this more obvious.

> If there is some deeper reason behind that - could you please point that out 
> to me? And if there is such a thing, why is it not necessary for storing 
> (e.g. stb_kernel)??

A load (sign-)extends a value to register size, a store doesn't.

That's why you have e.g. in the MIPS instruction set LB, LBU and SB
but no SBU, it would do the same as SB.


Thiemo




reply via email to

[Prev in Thread] Current Thread [Next in Thread]