You have to specify the same -march option to both gcc and the assembler, otherwise gcc may emit instructions that the assembler won’t accept. You probably have a rv64gc gcc that is emitting mafd instructions that the assembler won’t accept when you give it -march=rv32ic. Or maybe just use -march=rv32gc with the assembler to match the assembly code that you already have.
The -M no-aliases option probably doesn’t work correctly. I never went through the disassembler and tried to make it sane. So it probably handles most instructions correctly but not all of them, which means you may still get some instruction aliases printed when using it.