diff options
-rw-r--r-- | gdb/i386-tdep.c | 3 | ||||
-rw-r--r-- | gdb/testsuite/gdb.reverse/i386-avx-reverse.c | 14 | ||||
-rw-r--r-- | gdb/testsuite/gdb.reverse/i386-avx-reverse.exp | 28 |
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}" \ |