From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6108 invoked by alias); 22 Aug 2008 18:13:17 -0000 Received: (qmail 6098 invoked by uid 22791); 22 Aug 2008 18:13:16 -0000 X-Spam-Check-By: sourceware.org Received: from igw3.br.ibm.com (HELO igw3.br.ibm.com) (32.104.18.26) by sourceware.org (qpsmtpd/0.31) with ESMTP; Fri, 22 Aug 2008 18:12:24 +0000 Received: from mailhub1.br.ibm.com (unknown [9.18.232.109]) by igw3.br.ibm.com (Postfix) with ESMTP id BD9B039021D for ; Fri, 22 Aug 2008 14:52:10 -0300 (BRST) Received: from d24av01.br.ibm.com (d24av01.br.ibm.com [9.18.232.46]) by mailhub1.br.ibm.com (8.13.8/8.13.8/NCO v9.0) with ESMTP id m7MIBdO01159460 for ; Fri, 22 Aug 2008 15:11:54 -0300 Received: from d24av01.br.ibm.com (loopback [127.0.0.1]) by d24av01.br.ibm.com (8.12.11.20060308/8.13.3) with ESMTP id m7MIBXFx018801 for ; Fri, 22 Aug 2008 15:11:33 -0300 Received: from [9.8.4.99] ([9.8.4.99]) by d24av01.br.ibm.com (8.12.11.20060308/8.12.11) with ESMTP id m7MIBVjL017996; Fri, 22 Aug 2008 15:11:32 -0300 Subject: Re: [rfc] add ppc testcase to test fpscr From: Thiago Jung Bauermann To: Daniel Jacobowitz Cc: gdb-patches ml In-Reply-To: <20080822024659.GA12951@caradoc.them.org> References: <1219360611.8989.6.camel@localhost.localdomain> <20080821233115.GA1239@caradoc.them.org> <1219362081.29526.2.camel@localhost.localdomain> <20080822024659.GA12951@caradoc.them.org> Content-Type: text/plain Date: Fri, 22 Aug 2008 18:13:00 -0000 Message-Id: <1219428669.8167.2.camel@localhost.localdomain> Mime-Version: 1.0 X-Mailer: Evolution 2.22.3.1 Content-Transfer-Encoding: 7bit X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2008-08/txt/msg00589.txt.bz2 On Thu, 2008-08-21 at 22:46 -0400, Daniel Jacobowitz wrote: > I'd have to see more details - the example I gave is used all over the > testsuite. e.g. find.exp, restore.exp, setshow.exp. Shame on me, I changed back to gdb_test and it worked this time. I was probably struggling with something else and put the blame on the wrong thing. :-/ -- []'s Thiago Jung Bauermann IBM Linux Technology Center 2008-08-22 Thiago Jung Bauermann Add FPSCR tests. * gdb.arch/ppc-fp.exp: New file. * gdb.arch/ppc-fp.c: New file. diff --git a/gdb/testsuite/gdb.arch/ppc-fp.c b/gdb/testsuite/gdb.arch/ppc-fp.c new file mode 100644 index 0000000..90563f4 --- /dev/null +++ b/gdb/testsuite/gdb.arch/ppc-fp.c @@ -0,0 +1,42 @@ +/* Copyright 2008 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +int +main (int argc, char *argv[]) +{ + double result; + + asm ("fdiv %0, %1, %1\n" /* Invalid operation. */ + : "=f" (result) + : "f" (0.0)); + + printf ("result = %f\n", result); + + asm ("mtfsf 0xff, %0\n" /* Reset FPSCR. */ + : + : "f" (0.0)); + + asm ("fdiv %0, %1, %2\n" /* Division by zero. */ + : "=f" (result) + : "f" (1.25), "f" (0.0)); + + printf ("result = %f\n", result); + + return 0; +} diff --git a/gdb/testsuite/gdb.arch/ppc-fp.exp b/gdb/testsuite/gdb.arch/ppc-fp.exp new file mode 100644 index 0000000..1927c45 --- /dev/null +++ b/gdb/testsuite/gdb.arch/ppc-fp.exp @@ -0,0 +1,94 @@ +# Copyright (C) 2008 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# Please email any bugs, comments, and/or additions to this file to: +# bug-gdb@prep.ai.mit.edu +# + +# Tests for Powerpc floating point register setting and fetching + +if $tracelevel then { + strace $tracelevel +} + +if ![istarget "powerpc*"] then { + verbose "Skipping powerpc floating point register tests." + verbose -log "Skipping powerpc register tests." + return +} + +set testfile "ppc-fp" +set binfile ${objdir}/${subdir}/${testfile} +set srcfile ${testfile}.c + +if [get_compiler_info $binfile] { + warning "get_compiler failed" + return -1 +} + +if ![test_compiler_info gcc*] { + # We use GCC's extended asm syntax + warning "unknown compiler" + return -1 +} + +# Try to compile the test case. If we can't, assume the +# toolchain does not yet provide DFP support and bail out. +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {quiet debug}] != "" } { + verbose "Skipping FPSCR tests." + return -1 +} + +# Start with a fresh gdb. + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${binfile} + +gdb_breakpoint [gdb_get_line_number "Invalid operation."] +gdb_breakpoint [gdb_get_line_number "Division by zero."] + +# Run the program, when the prompt comes back it will be for the invalid +# operation breakpoint. +gdb_test "run" "" "" + +# First, verify if FPSCR is all zeroes. +gdb_test "print \$fpscr" " = 0\r" "FPSCR is all zeroes" + +# Step over invalid operation. +gdb_test "next" "" "" + +# Verify that the following bits are set (See Power ISA for details): +# +# 32 - Floating-Point Exception Summary (FX) +# 34 - Floating-Point Invalid Operation Summary (VX) +# 42 - Floating-Point Invalid Operation Exception (VXZDZ) +# 47 - Floating-Point Result Class Descriptor (C) +# 51 - Floating-Point Unordered or NaN (FU or ?) +gdb_test "print/t \$fpscr" " = 10100000001000010001000000000000\r" "FPSCR for invalid operation" + +gdb_continue_to_breakpoint "go to division by zero" + +# Step over division by zero. +gdb_test "next" "" "" + +# Verify that the following bits are set (See Power ISA for details): +# +# 32 - Floating-Point Exception Summary (FX) +# 37 - Floating-Point Zero Divide Exception (ZX) +# 49 - Floating-Point Greater Than or Positive (FG or >) +# 51 - Floating-Point Unordered or NaN (FU or ?) +gdb_test "print/t \$fpscr" " = 10000100000000000101000000000000\r" "FPSCR for division by zero"