aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuinevere Larsen <guinevere@redhat.com>2024-11-14 09:31:00 -0300
committerGuinevere Larsen <guinevere@redhat.com>2024-11-22 17:40:26 -0300
commitab8c2180a3de1461f361c75c420e4d37ac709e0b (patch)
tree45fdb02b9e350d9556ff515122a28c4b8f388b16
parentb19c86e2db1c9556a4199a6d9c67d9585fa6be24 (diff)
downloadbinutils-ab8c2180a3de1461f361c75c420e4d37ac709e0b.zip
binutils-ab8c2180a3de1461f361c75c420e4d37ac709e0b.tar.gz
binutils-ab8c2180a3de1461f361c75c420e4d37ac709e0b.tar.bz2
gdb/record: introduce recoding support for vpor
This commit adds recording support for the AVX instruction vpor, and the AVX2 extension. Since the encoding of vpor and vpxor are the same, and their semantics are basically the same, modulo the mathematical operation, they are handled by the same switch case block. This also updates the vpxor function, to test vpor and vpxor, and updates the name to vpor_xor_test to better reflect what it does. Approved-By: Tom Tromey <tom@tromey.com>
-rw-r--r--gdb/i386-tdep.c3
-rw-r--r--gdb/testsuite/gdb.reverse/i386-avx-reverse.c14
-rw-r--r--gdb/testsuite/gdb.reverse/i386-avx-reverse.exp28
3 files changed, 29 insertions, 16 deletions
diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c
index 0f366da..eb8ddfc 100644
--- a/gdb/i386-tdep.c
+++ b/gdb/i386-tdep.c
@@ -5001,7 +5001,8 @@ i386_record_vex (struct i386_record_s *ir, uint8_t vex_w, uint8_t vex_r,
}
break;
- case 0xef:
+ case 0xef: /* VPXOR */
+ case 0xeb: /* VPOR */
{
i386_record_modrm (ir);
int reg_offset = ir->reg + vex_r * 8;
diff --git a/gdb/testsuite/gdb.reverse/i386-avx-reverse.c b/gdb/testsuite/gdb.reverse/i386-avx-reverse.c
index 02fd3da..5ce363f 100644
--- a/gdb/testsuite/gdb.reverse/i386-avx-reverse.c
+++ b/gdb/testsuite/gdb.reverse/i386-avx-reverse.c
@@ -211,9 +211,9 @@ vzeroupper_test ()
}
int
-vpxor_test ()
+vpor_xor_test ()
{
- /* start vpxor_test. */
+ /* start vpor_xor_test. */
/* Using GDB, load this value onto the register, for ease of testing.
ymm0.v2_int128 = {0x0, 0x12345}
ymm1.v2_int128 = {0x1f1e1d1c1b1a1918, 0x0}
@@ -226,7 +226,13 @@ vpxor_test ()
asm volatile ("vpxor %ymm2, %ymm15, %ymm1");
asm volatile ("vpxor %xmm2, %xmm15, %xmm2");
asm volatile ("vpxor %ymm2, %ymm1, %ymm15");
- return 0; /* end vpxor_test */
+
+ asm volatile ("vpor %ymm0, %ymm0, %ymm0");
+ asm volatile ("vpor %xmm0, %xmm1, %xmm0");
+ asm volatile ("vpor %ymm2, %ymm15, %ymm1");
+ asm volatile ("vpor %xmm2, %xmm15, %xmm2");
+ asm volatile ("vpor %ymm2, %ymm1, %ymm15");
+ return 0; /* end vpor_xor_test */
}
int
@@ -302,7 +308,7 @@ main ()
vpunpck_test ();
vpbroadcast_test ();
vzeroupper_test ();
- vpxor_test ();
+ vpor_xor_test ();
vpcmpeq_test ();
vpmovmskb_test ();
return 0; /* end of main */
diff --git a/gdb/testsuite/gdb.reverse/i386-avx-reverse.exp b/gdb/testsuite/gdb.reverse/i386-avx-reverse.exp
index 198025e..6d89900 100644
--- a/gdb/testsuite/gdb.reverse/i386-avx-reverse.exp
+++ b/gdb/testsuite/gdb.reverse/i386-avx-reverse.exp
@@ -351,26 +351,32 @@ gdb_test "finish" "Run till exit from.*vzeroupper_test.*" \
"leaving vzeroupper"
# Preparation and testing vpxor instructions.
-gdb_test_no_output "set \$ymm0.v2_int128 = {0x0, 0x12345}" "set ymm0 for vpxor"
+gdb_test_no_output "set \$ymm0.v2_int128 = {0x0, 0x12345}" "set ymm0 for vpor_xor"
gdb_test_no_output "set \$ymm1.v2_int128 = {0x1f1e1d1c1b1a1918, 0x0}" \
- "set ymm1 for vpxor"
-gdb_test_no_output "set \$ymm2.v2_int128 = {0x0, 0xbeef}" "set ymm2 for vpxor"
-gdb_test_no_output "set \$ymm15.v2_int128 = {0x0, 0xcafeface}" "set ymm15 for vpxor"
+ "set ymm1 for vpor_xor"
+gdb_test_no_output "set \$ymm2.v2_int128 = {0x0, 0xbeef}" "set ymm2 for vpor_xor"
+gdb_test_no_output "set \$ymm15.v2_int128 = {0x0, 0xcafeface}" "set ymm15 for vpor_xor"
+
+if {[record_full_function "vpor_xor"] == true} {
+ test_one_register "vpor" "ymm15" "0x0, 0xcafe4421"
+ test_one_register "vpor" "ymm2" "0x0, 0x0"
+ test_one_register "vpor" "ymm1" "0x0, 0xcafe4421"
+ test_one_register "vpor" "ymm0" "0x1f1e1d1c1b1a1918, 0x0" "first: "
+ test_one_register "vpor" "ymm0" "0x1f1e1d1c1b1a1918, 0x0" "second: "
-if {[record_full_function "vpxor"] == true} {
test_one_register "vpxor" "ymm15" "0x0, 0xcafeface"
test_one_register "vpxor" "ymm2" "0x0, 0xbeef"
test_one_register "vpxor" "ymm1" "0x1f1e1d1c1b1a1918, 0x0"
- test_one_register "vpxor" "ymm0" "0x0, 0x0" "first"
- test_one_register "vpxor" "ymm0" "0x0, 0x12345" "second"
+ test_one_register "vpxor" "ymm0" "0x0, 0x0" "first: "
+ test_one_register "vpxor" "ymm0" "0x0, 0x12345" "second: "
gdb_test "record stop" "Process record is stopped.*" \
- "delete history for vpxor_test"
+ "delete history for vpor_xor_test"
} else {
- untested "couldn't run vpxor tests"
+ untested "couldn't run vpor_xor tests"
}
-gdb_test "finish" "Run till exit from.*vpxor_test.*" \
- "leaving vpxor"
+gdb_test "finish" "Run till exit from.*vpor_xor_test.*" \
+ "leaving vpor_xor"
# Preparation and testing vpcmpeq instructions.
gdb_test_no_output "set \$ymm0.v2_int128 = {0x12345, 0x12345}" \