From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:47728) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Qtn47-0000N7-T2 for qemu-devel@nongnu.org; Wed, 17 Aug 2011 16:50:22 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Qtn46-00072B-HL for qemu-devel@nongnu.org; Wed, 17 Aug 2011 16:50:19 -0400 Received: from mail-gx0-f173.google.com ([209.85.161.173]:58364) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Qtn46-0006vE-Al for qemu-devel@nongnu.org; Wed, 17 Aug 2011 16:50:18 -0400 Received: by gxk26 with SMTP id 26so1231683gxk.4 for ; Wed, 17 Aug 2011 13:50:02 -0700 (PDT) From: Bryce Lanham Date: Wed, 17 Aug 2011 15:47:11 -0500 Message-Id: <1313614076-28878-67-git-send-email-blanham@gmail.com> In-Reply-To: <1313614076-28878-1-git-send-email-blanham@gmail.com> References: <1313614076-28878-1-git-send-email-blanham@gmail.com> Subject: [Qemu-devel] [PATCH 066/111] m68k: add fgetexp List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Laurent Vivier From: Laurent Vivier Signed-off-by: Laurent Vivier --- .gitignore | 1 + target-m68k/helper.c | 17 +++++++++++++++++ target-m68k/helpers.h | 1 + target-m68k/translate.c | 3 +++ tests/m68k/Makefile | 2 +- tests/m68k/fgetexp.S | 8 ++++++++ 6 files changed, 31 insertions(+), 1 deletions(-) create mode 100644 tests/m68k/fgetexp.S diff --git a/.gitignore b/.gitignore index 08819c2..ef339f5 100644 --- a/.gitignore +++ b/.gitignore @@ -78,3 +78,4 @@ tests/m68k/fmovecr tests/m68k/fmovem tests/m68k/fmul tests/m68k/fsub +tests/m68k/fgetexp diff --git a/target-m68k/helper.c b/target-m68k/helper.c index 7dcac61..2be3355 100644 --- a/target-m68k/helper.c +++ b/target-m68k/helper.c @@ -1275,6 +1275,23 @@ void HELPER(chs_FP0)(CPUState *env) floatx80_to_FP0(env, res); } +void HELPER(getexp_FP0)(CPUState *env) +{ + int32_t exp; + floatx80 res; + + DBG_FPU("getexp_FP0(%Lg)\n", LDOUBLE(FP0_to_floatx80(env))); + + DBG_FPU(" fp0h 0x%08x fp0l 0x%016" PRIx64 "\n", env->fp0h, env->fp0l); + + exp = (env->fp0h & 0x7fff) - 0x3fff; + + res = int32_to_floatx80(exp, &env->fp_status); + + DBG_FPU(" = %Lg\n", LDOUBLE(res)); + floatx80_to_FP0(env, res); +} + void HELPER(add_FP0_FP1)(CPUState *env) { floatx80 res; diff --git a/target-m68k/helpers.h b/target-m68k/helpers.h index 6ddd659..0b4c0cb 100644 --- a/target-m68k/helpers.h +++ b/target-m68k/helpers.h @@ -67,6 +67,7 @@ DEF_HELPER_1(itrunc_FP0, void, env) DEF_HELPER_1(sqrt_FP0, void, env) DEF_HELPER_1(abs_FP0, void, env) DEF_HELPER_1(chs_FP0, void, env) +DEF_HELPER_1(getexp_FP0, void, env) DEF_HELPER_1(add_FP0_FP1, void, env) DEF_HELPER_1(sub_FP0_FP1, void, env) DEF_HELPER_1(mul_FP0_FP1, void, env) diff --git a/target-m68k/translate.c b/target-m68k/translate.c index 6bba2c9..d09e325 100644 --- a/target-m68k/translate.c +++ b/target-m68k/translate.c @@ -3647,6 +3647,9 @@ DISAS_INSN(fpu) case 0x1a: case 0x5a: case 0x5e: /* fneg */ gen_helper_chs_FP0(cpu_env); break; + case 0x1e: /* fgetexp */ + gen_helper_getexp_FP0(cpu_env); + break; case 0x20: case 0x60: case 0x64: /* fdiv */ gen_op_load_fpr_FP1(REG(ext, 7)); gen_helper_div_FP0_FP1(cpu_env); diff --git a/tests/m68k/Makefile b/tests/m68k/Makefile index 8b0d8a7..a7a59ac 100644 --- a/tests/m68k/Makefile +++ b/tests/m68k/Makefile @@ -1,4 +1,4 @@ -TESTS=fmovecr fmove fmovem fsub fdiv fmul fabs +TESTS=fmovecr fmove fmovem fsub fdiv fmul fabs fgetexp all: $(TESTS) diff --git a/tests/m68k/fgetexp.S b/tests/m68k/fgetexp.S new file mode 100644 index 0000000..d17f7ab --- /dev/null +++ b/tests/m68k/fgetexp.S @@ -0,0 +1,8 @@ + .include "trap.i" + + .text + .globl _start +_start: + fmove.l #4096, %fp0 + fgetexp.x %fp0, %fp1 + exit 0 -- 1.7.2.3