It's likely that the compiler will online it. But indeed it's better to add -minline-all-stringops to the compiler command line. Paolo Il ven 19 mar 2021, 18:35 Stefano Garzarella ha scritto: > On Fri, Mar 19, 2021 at 06:03:59PM +0100, Paolo Bonzini wrote: > >On 19/03/21 15:06, Philippe Mathieu-Daudé wrote: > >>>+ > >>>+/* Search RSDP signature. */ > >>>+static uintptr_t search_rsdp(uint32_t start_addr, uint32_t end_addr) > >>>+{ > >>>+ uint64_t *rsdp_p; > >>>+ > >>>+ /* RSDP signature is always on a 16 byte boundary */ > >>>+ for (rsdp_p = (uint64_t *)start_addr; rsdp_p < (uint64_t > *)end_addr; > >>>+ rsdp_p += 2) { > >>>+ if (*rsdp_p == RSDP_SIGNATURE) { > >>>+ return (uintptr_t)rsdp_p; > >>>+ } > >>>+ } > >>>+ > >>>+ return 0; > >>>+} > >>gcc 10.2.1 "cc (Alpine 10.2.1_pre2) 10.2.1 20210313" reports: > >> > >>pc-bios/optionrom/pvh_main.c: In function 'search_rsdp': > >>pc-bios/optionrom/pvh_main.c:61:21: warning: comparison is always false > >>due to limited range of data type [-Wtype-limits] > >> 61 | if (*rsdp_p == RSDP_SIGNATURE) { > >> | ^~ > > > >This is probably a different bug, but I'll also add that uint64_t is > >supposed to be aligned to 64 bits, so you need either > >__attribute__((packed)), or use char* and memcmp. If you go for the > >latter, it would fix the issue that Philippe is reporting. > > Yes, memcmp maybe is also more readable, but being baremetal, I have to > implement it right? > > Thanks, > Stefano > >