[PATCH,rs6000] Fix vsx-regs.exp testcase failure
authorWill Schmidt <will_schmidt@vnet.ibm.com>
Mon, 12 Apr 2021 19:17:43 +0000 (14:17 -0500)
committerWill Schmidt <will_schmidt@vnet.ibm.com>
Mon, 12 Apr 2021 19:17:43 +0000 (14:17 -0500)
Hi,
  This test exercise updates to the F* and VS* registers
and verifies updates to the same.  Note that the registers
overlap; the doubleword[1] portion of any VS0-VS31
register contains the F0-F31 register contents, so any updates
to one can be measured in the other.

Per a brief investigation, we see that dl_main() currently
uses some VSX instructions, so the VS* values are not
going to be zero when this testcase reaches main, where these
tests begin.  The test harness does not explicitly
initialize the full VS* values, so the first test loop
that updates the F* values means our VS* values are
uninitalized and will fail the first set of checks.
This update explicitly initializes the doubleword[0] portion
of the VS* registers, to allow this test to succeed.

2021-04-12  Will Schmidt  <will_schmidt@vnet.ibm.com>

gdb/testsuite/ChangeLog:
        * gdb.arch/vsx-regs.exp: Initialize vs* doublewords.

gdb/testsuite/ChangeLog
gdb/testsuite/gdb.arch/vsx-regs.exp

index d940bfbb5e46d2d3e5f0e8dc8050b171e5407fc2..b8c84aaa57f56b1eed898e5470a0daa1dc9f8458 100644 (file)
@@ -1,3 +1,7 @@
+2021-04-12  Will Schmidt  <will_schmidt@vnet.ibm.com>
+
+       * gdb.arch/powerpc-vsx-regs.exp: Initialize vs* doublewords.
+
 2021-04-12  Will Schmidt  <will_schmidt@vnet.ibm.com>
 
        * gdb.arch/powerpc-plxv-nonrel.s:  Testcase using
index c234d6afd362305facb0494b6b4d15be6433b459..0b0d2fa4d53f67c5e3a441275d62748ee88a2f4d 100644 (file)
@@ -89,7 +89,18 @@ if {$endianness == "big"} {
 
 set float_register ".raw 0xdeadbeefdeadbeef."
 
-# First run the F0~F31/VS0~VS31 tests
+# Note that the F0-F31 registers are shared with the doubleword 0 portion of
+# the VS0-VS31 registers, the doubleword 1 portions of VS* remain unchanged
+# after updates to F*.
+# Since dl_main uses some VS* registers, and per inspection their values are
+# no longer zero when our test reaches main(), we need to explicitly
+# initialize the doubleword1 portions before we run our tests against
+# values currently in those registers.
+
+# 0: Initialize the (doubleword 1) portion of the VS0-VS31 registers.
+for {set i 0} {$i < 32} {incr i 1} {
+    gdb_test_no_output "set \$vs$i.v2_double\][0\] = 0"
+}
 
 # 1: Set F0~F31 registers and check if it reflects on VS0~VS31.
 for {set i 0} {$i < 32} {incr i 1} {