https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108239
Bug ID: 108239
Summary: -mprefixed causes too large displacements for extended
inline asm memory operands
Product: gcc
Version: 12.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: npiggin at gmail dot com
CC: segher at gcc dot gnu.org
Target Milestone: ---
Target: powerpc64le-linux-gnu
--- test.c ---
// powerpc64le-linux-gnu-gcc -O2 -mcpu=power10 -mno-pcrel -c test.c
#include <stdint.h>
static inline uint32_t readl(uint32_t *addr)
{
uint32_t ret;
__asm__ __volatile__("lwz %0,%1" : "=r" (ret) : "m" (*addr));
return ret;
}
int test(void *addr)
{
return readl(addr + 0x8024);
}
---
This generates invalid assembly 'lwz 3,32804(3)' with displacement exceeding
allowable size. Using -mno-prefixed fixes the problem.