Obvious:
first of all: you write "inline assembly code" not "inline" functions (which is a different topic).
Imagine this:
you enclose assembly code inside C-code. You use MCU instructions. All fine, the compiler knows the instructions.
But it does not know how to deal with "EEDR"! Even you know it is a symbolic name for a registers - the assembler (called from compiler) does not know any register.
So, for your assembly code (like an *.S file), you had to define what "EEDR" is, e.g. an address value. EEDR is nothing what be known by any compiler (actually here the assembler): it is a name for something where you do not resolve what the name is (a register address here).
Simple way to solve: provide instead of EEDR the real physical address of this register, e.g. 0x0123ABCD.
If you do not like it: you need an include file, even for this assembly code, which defines what EEDR is.
Sure, BTW: it is not the compiler, it is the assembler who has to know what EEDR means (called from compiler in order to deal with your MCU instructions).