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