https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107731
--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Xi Ruoyao from comment #2) > Interestingly it "worked" with GCC 12.2... I don't see how it could work though. 62ec3b5352b3 (chenglulu 2021-11-27 14:58:21 +0800 4499) default: 62ec3b5352b3 (chenglulu 2021-11-27 14:58:21 +0800 4500) switch (code) 62ec3b5352b3 (chenglulu 2021-11-27 14:58:21 +0800 4501) { 62ec3b5352b3 (chenglulu 2021-11-27 14:58:21 +0800 4502) case REG: 62ec3b5352b3 (chenglulu 2021-11-27 14:58:21 +0800 4503) { 62ec3b5352b3 (chenglulu 2021-11-27 14:58:21 +0800 4504) unsigned int regno = REGNO (op); 62ec3b5352b3 (chenglulu 2021-11-27 14:58:21 +0800 4505) if (letter && letter != 'z') 62ec3b5352b3 (chenglulu 2021-11-27 14:58:21 +0800 4506) output_operand_lossage ("invalid use of '%%%c'", letter); 62ec3b5352b3 (chenglulu 2021-11-27 14:58:21 +0800 4507) fprintf (file, "%s", reg_names[regno]); 62ec3b5352b3 (chenglulu 2021-11-27 14:58:21 +0800 4508) } 62ec3b5352b3 (chenglulu 2021-11-27 14:58:21 +0800 4509) break; 62ec3b5352b3 (chenglulu 2021-11-27 14:58:21 +0800 4510) 62ec3b5352b3 (chenglulu 2021-11-27 14:58:21 +0800 4511) case MEM: 62ec3b5352b3 (chenglulu 2021-11-27 14:58:21 +0800 4512) if (letter == 'D') 62ec3b5352b3 (chenglulu 2021-11-27 14:58:21 +0800 4513) output_address (GET_MODE (op), 62ec3b5352b3 (chenglulu 2021-11-27 14:58:21 +0800 4514) plus_constant (Pmode, XEXP (op, 0), 4)); 62ec3b5352b3 (chenglulu 2021-11-27 14:58:21 +0800 4515) else if (letter == 'b') 62ec3b5352b3 (chenglulu 2021-11-27 14:58:21 +0800 4516) { 62ec3b5352b3 (chenglulu 2021-11-27 14:58:21 +0800 4517) gcc_assert (REG_P (XEXP (op, 0))); 62ec3b5352b3 (chenglulu 2021-11-27 14:58:21 +0800 4518) loongarch_print_operand (file, XEXP (op, 0), 0); 62ec3b5352b3 (chenglulu 2021-11-27 14:58:21 +0800 4519) } 62ec3b5352b3 (chenglulu 2021-11-27 14:58:21 +0800 4520) else if (letter && letter != 'z') 62ec3b5352b3 (chenglulu 2021-11-27 14:58:21 +0800 4521) output_operand_lossage ("invalid use of '%%%c'", letter); 62ec3b5352b3 (chenglulu 2021-11-27 14:58:21 +0800 4522) else 62ec3b5352b3 (chenglulu 2021-11-27 14:58:21 +0800 4523) output_address (GET_MODE (op), XEXP (op, 0)); 62ec3b5352b3 (chenglulu 2021-11-27 14:58:21 +0800 4524) break; 62ec3b5352b3 (chenglulu 2021-11-27 14:58:21 +0800 4525) 62ec3b5352b3 (chenglulu 2021-11-27 14:58:21 +0800 4526) default: 62ec3b5352b3 (chenglulu 2021-11-27 14:58:21 +0800 4527) if (letter == 'z' && op == CONST0_RTX (GET_MODE (op))) 62ec3b5352b3 (chenglulu 2021-11-27 14:58:21 +0800 4528) fputs (reg_names[GP_REG_FIRST], file); 62ec3b5352b3 (chenglulu 2021-11-27 14:58:21 +0800 4529) else if (letter && letter != 'z') 62ec3b5352b3 (chenglulu 2021-11-27 14:58:21 +0800 4530) output_operand_lossage ("invalid use of '%%%c'", letter); 62ec3b5352b3 (chenglulu 2021-11-27 14:58:21 +0800 4531) else 62ec3b5352b3 (chenglulu 2021-11-27 14:58:21 +0800 4532) output_addr_const (file, loongarch_strip_unspec_address (op)); 62ec3b5352b3 (chenglulu 2021-11-27 14:58:21 +0800 4533) break; 62ec3b5352b3 (chenglulu 2021-11-27 14:58:21 +0800 4534) }