--- qemu-0.8.1/target-sparc/exec.h 2006-05-03 13:32:58.000000000 -0700 +++ qemu-0.8.1/target-sparc/exec.h 2006-05-29 02:32:09.000000000 -0700 @@ -52,6 +52,7 @@ void set_cwp(int new_cwp); void do_fitos(void); void do_fitod(void); void do_fabss(void); +void do_fnegs(void); void do_fsqrts(void); void do_fsqrtd(void); void do_fcmps(void); --- qemu-0.8.1/target-sparc/op.c 2006-05-03 13:32:58.000000000 -0700 +++ qemu-0.8.1/target-sparc/op.c 2006-05-29 02:29:48.000000000 -0700 @@ -1341,7 +1341,7 @@ void OPPROTO op_flush_T0(void) void OPPROTO op_fnegs(void) { - FT0 = -FT1; + do_fnegs(); } void OPPROTO op_fabss(void) --- qemu-0.8.1/target-sparc/op_helper.c 2006-05-03 13:32:58.000000000 -0700 +++ qemu-0.8.1/target-sparc/op_helper.c 2006-05-29 02:31:46.000000000 -0700 @@ -33,6 +33,11 @@ void do_fabsd(void) } #endif +void do_fnegs(void) +{ + FT0 = float32_chs(FT1); +} + void do_fsqrts(void) { FT0 = float32_sqrt(FT1, &env->fp_status);