aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorJens Remus <jremus@linux.ibm.com>2024-12-11 09:58:35 +0100
committerJens Remus <jremus@linux.ibm.com>2024-12-11 09:58:35 +0100
commitd76ab5b0579e10466988ec0633536e3df8fdd77e (patch)
treeb85556d4e00577e5405900bf3e44e5ac801c5097 /gdb
parent4486659cf263bdb93e5525989c6e516c91c1b27e (diff)
downloadbinutils-d76ab5b0579e10466988ec0633536e3df8fdd77e.zip
binutils-d76ab5b0579e10466988ec0633536e3df8fdd77e.tar.gz
binutils-d76ab5b0579e10466988ec0633536e3df8fdd77e.tar.bz2
gdb: s390: Correct record/replay of may/mayr insn
The IBM z/Architecture Principles of Operation [1] specifies that the R1 operand of the may and mayr instructions designates may designate either the lower- or higher-numbered register of a floating-point- register (FPR) pair. [1]: IBM z/Architecture Principles of Operation, SA22-7832-13, IBM z16, https://publibfp.dhe.ibm.com/epubs/pdf/a227832d.pdf gdb/ * s390-tdep.c (s390_process_record): may/mayr operand R1 may designate lower- or higher numbered register of FPR pair. Signed-off-by: Jens Remus <jremus@linux.ibm.com>
Diffstat (limited to 'gdb')
-rw-r--r--gdb/s390-tdep.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/gdb/s390-tdep.c b/gdb/s390-tdep.c
index be176f0..d4b9a24 100644
--- a/gdb/s390-tdep.c
+++ b/gdb/s390-tdep.c
@@ -4014,6 +4014,13 @@ ex:
/* 0xb330-0xb335 undefined */
case 0xb33a: /* MAYR - multiply and add unnormalized */
+ /* float pair destination [RRD]; R1 may designate lower- or
+ higher-numbered register of pair */
+ if (record_full_arch_list_add_reg (regcache, S390_F0_REGNUM + (inib[4] & 13)))
+ return -1;
+ if (record_full_arch_list_add_reg (regcache, S390_F0_REGNUM + (inib[4] | 2)))
+ return -1;
+ break;
case 0xb33b: /* MYR - multiply unnormalized */
/* float pair destination [RRD] */
if (record_full_arch_list_add_reg (regcache, S390_F0_REGNUM + inib[4]))
@@ -6333,6 +6340,13 @@ ex:
/* 0xed36 undefined */
case 0xed3a: /* MAY - multiply and add unnormalized */
+ /* float pair destination [RXF]; R1 may designate lower- or
+ higher-numbered register of pair */
+ if (record_full_arch_list_add_reg (regcache, S390_F0_REGNUM + (inib[8] & 13)))
+ return -1;
+ if (record_full_arch_list_add_reg (regcache, S390_F0_REGNUM + (inib[8] | 2)))
+ return -1;
+ break;
case 0xed3b: /* MY - multiply unnormalized */
/* float pair destination [RXF] */
if (record_full_arch_list_add_reg (regcache, S390_F0_REGNUM + inib[8]))