That's unsurprising, since without -march, gcc will emit code for a generic cpu that doesn't have a popcnt instruction. Early x86_64 cpus didn't have popcnt, so neither will the code that gcc emits & it's the same for any other architecture.
If you want to use instructions that are only available on or after a specific cpu generation, then you need to tell your compiler to target that cpu's instruction set.
If you want to use instructions that are only available on or after a specific cpu generation, then you need to tell your compiler to target that cpu's instruction set.