https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87761
--- Comment #1 from Paul Hua <paul.hua.gm at gmail dot com> --- and other new fails: 681 FAIL: gcc.target/mips/fpr-moves-5.c -O1 scan-assembler \\tsdc1\\t\\\\\$f12,0\\\\(\\\\\$6\\\\)\\n 682 FAIL: gcc.target/mips/fpr-moves-5.c -O1 scan-assembler \\tsdc1\\t\\\\\$f13,8\\\\(\\\\\$6\\\\)\\n 683 FAIL: gcc.target/mips/fpr-moves-5.c -O2 scan-assembler \\tsdc1\\t\\\\\$f12,0\\\\(\\\\\$6\\\\)\\n 684 FAIL: gcc.target/mips/fpr-moves-5.c -O2 scan-assembler \\tsdc1\\t\\\\\$f13,8\\\\(\\\\\$6\\\\)\\n 685 FAIL: gcc.target/mips/fpr-moves-5.c -O2 -flto -fno-use-linker-plugin -flto-partition=none scan-assembler \\tsdc1\\t\\\\\$f12,0\\\\(\\\\\$6\\\\)\\n 686 FAIL: gcc.target/mips/fpr-moves-5.c -O2 -flto -fno-use-linker-plugin -flto-partition=none scan-assembler \\tsdc1\\t\\\\\$f13,8\\\\(\\\\\$6\\\\)\\n 687 FAIL: gcc.target/mips/fpr-moves-5.c -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects scan-assembler \\tsdc1\\t\\\\\$f12,0\\\\(\\\\\$6\\\\)\\n 688 FAIL: gcc.target/mips/fpr-moves-5.c -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects scan-assembler \\tsdc1\\t\\\\\$f13,8\\\\(\\\\\$6\\\\)\\n 689 FAIL: gcc.target/mips/fpr-moves-5.c -O3 -g scan-assembler \\tsdc1\\t\\\\\$f12,0\\\\(\\\\\$6\\\\)\\n 690 FAIL: gcc.target/mips/fpr-moves-5.c -O3 -g scan-assembler \\tsdc1\\t\\\\\$f13,8\\\\(\\\\\$6\\\\)\\n 691 FAIL: gcc.target/mips/fpr-moves-5.c -Os scan-assembler \\tsdc1\\t\\\\\$f12,0\\\\(\\\\\$6\\\\)\\n 692 FAIL: gcc.target/mips/fpr-moves-5.c -Os scan-assembler \\tsdc1\\t\\\\\$f13,8\\\\(\\\\\$6\\\\)\\n $ cat fpr-moves-5.i # 1 "/home/xuchenghua/GCC/gcc_git_trunk/gcc/testsuite/gcc.target/mips/fpr-moves-5.c" # 1 "<built-in>" # 1 "<command-line>" # 1 "/usr/include/stdc-predef.h" 1 3 4 # 1 "<command-line>" 2 # 1 "/home/xuchenghua/GCC/gcc_git_trunk/gcc/testsuite/gcc.target/mips/fpr-moves-5.c" __attribute__((nomips16)) void foo (long double d, long double *x) { *x = d; } __attribute__((nomips16)) long double bar (long double d, long double *x) { register long double l1 asm ("$8") = d; register long double l2 asm ("$10") = x[1]; register long double l3 asm ("$f20") = 0.0; asm ("#foo" : "=d" (l1) : "d" (l1)); asm ("#foo" : "=d" (l2) : "d" (l2)); asm volatile ("#foo" :: "f" (l3)); x[1] = l1; return l2; } $./cc1 -fpreprocessed fpr-moves-5.i -mel -quiet -dumpbase fpr-moves-5.c -mabi=64 -mhard-float -mgp64 -mlong64 -march=mips64r2 -mllsc -mips64r2 -mno-shared -auxbase-strip fpr-moves-5.s -O1 -version -fdiagnostics-color=never -fno-diagnostics-show-caret -fno-diagnostics-show-line-numbers -ffat-lto-objects -fno-ident -o fpr-moves-5.s good asm: foo: .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0 .mask 0x00000000,0 .fmask 0x00000000,0 .set noreorder .set nomacro sdc1 $f12,0($6) jr $31 sdc1 $f13,8($6) bad asm: foo: .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0 .mask 0x00000000,0 .fmask 0x00000000,0 .set noreorder .set nomacro dmfc1 $2,$f12 dmfc1 $3,$f13 sd $2,0($6) jr $31 sd $3,8($6)