From patchwork Fri May 11 10:52:53 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Hayward X-Patchwork-Id: 27236 Received: (qmail 101708 invoked by alias); 11 May 2018 10:53:20 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 101623 invoked by uid 89); 11 May 2018 10:53:19 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-23.5 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, SPF_PASS, UNWANTED_LANGUAGE_BODY autolearn=ham version=3.3.2 spammy= X-HELO: EUR01-VE1-obe.outbound.protection.outlook.com Received: from mail-ve1eur01on0049.outbound.protection.outlook.com (HELO EUR01-VE1-obe.outbound.protection.outlook.com) (104.47.1.49) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 11 May 2018 10:53:16 +0000 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Alan.Hayward@arm.com; Received: from C02TF0U7HF1T.arm.com (217.140.96.140) by VI1PR0802MB2143.eurprd08.prod.outlook.com (2603:10a6:800:9b::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.755.16; Fri, 11 May 2018 10:53:04 +0000 From: Alan Hayward To: gdb-patches@sourceware.org Cc: nd@arm.com, Alan Hayward Subject: [PATCH 5/8] Add aarch64 psuedo help functions Date: Fri, 11 May 2018 11:52:53 +0100 Message-Id: <20180511105256.27388-6-alan.hayward@arm.com> In-Reply-To: <20180511105256.27388-1-alan.hayward@arm.com> References: <20180511105256.27388-1-alan.hayward@arm.com> MIME-Version: 1.0 X-ClientProxiedBy: CWXP265CA0010.GBRP265.PROD.OUTLOOK.COM (2603:10a6:400:2e::22) To VI1PR0802MB2143.eurprd08.prod.outlook.com (2603:10a6:800:9b::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR0802MB2143; X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2143; 3:/akZams7PWs4rScXm1nWwKNVJqHBbx+KaxaDSc0jfjkaqO2eMtSt6sxLZnGaqA3QCUCDb9a5E/Yht5/BajfQ4b0fNl0KGRObG/7PMVJSipvvrYagTjwgsz8YI9xaRnLaipLuxk/RIG7wUYAhkInFqfSyfSZDkyptJZyoMglnxAdkBt+Nw5S5ShfjibvIk+2N0xXwl314Y9RzfOHViwltwjtxiVkHGxIHXemxQPGQWYlqBYLZoTWEe314fnoWn6kS; 25:3TRGWxQ8mNsAvczcCv2t0t5fofx9RJD4JaCj3M9+gQmtxTe/Ht7P4hnQeYPO3dF/7tqRgmMRJan+wm3xZYtztIdbWIFzi+VzGZGKv5XrbSsZR6KuqRJFUu0dbJ71b/ZPEOYbYCN4anNINHNC8JoFfDB/LupdyVJ8nCVj965GyOmt5q7OhR9M6vM9gDgXpDLwmZLDA+CD+YsRIUD2FnMuyUpVNn8qPEjQC3JedYgUO0YC7ETt6o9rtDh6SeGF6mcIqSG8qNCIgMTSmkil/sLVZsiWhdzXNBNKODcvQO+Ien4VgRm6MvSKJ3gfVZqEDeXXobmOZVrTifdh4zVhPmgz2A==; 31:gwQl6/XZflpXZAlx65a/vu+YLxJ3tnDzzQ3+03FK2HDXMIBluHm75moDTXq0peJIFO9FnBorFRKWxMzTFwtXTkR/mKurm94goVNPGzA/E0HRVgapYU9G6nvK6ZmppSv3wFLsAiMw34kd/yMOfDikUMUbPxT+DnTRTgP0QoxXWCe1debUtnAAaBqPMmnGIKqo1wKbZjRFIYL2+Q6Pv60BTXfBhDu5KmGjVj07x4Hv+Js= X-MS-TrafficTypeDiagnostic: VI1PR0802MB2143: NoDisclaimer: True X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2143; 20:9033vgoJw1cjnKdERNs7rcF9P5uPAh6++a86DajJaKKii437XSCi3PxTnZ2gZJQ0h3tzC12Rfup/yIbwXm6Lz05rYfVg/xmToAoyreX0m5yxVikMUNm1SEGItbhVe3sCV0zjtLehZpKVCoT7uDBeLNxiwfKNM31UEYepvfhNaWNLLbtKRkWK1X0fsjzer+iq5MkB2mVVLcJmxpyZwwgIVE93+3RDqMHd/IoQOn4rDoEXkdf60gZ0JQfxmHqA52me; 4:fApWqXBI11hdB+fEEke322co+inOWz+rvcYh3eD9xx6723hqKc+GUZqVub/RG0fpI80WyTyj+TTpoJPcgDeDDEPgxkdu28Tna4j5aKCXBBx8ZC5N7B+O+2AgnZALKDVoHh0Tp63BARqRnnO2I7X2smWm6oaEhVDM3ho6KmrtB2WKEQ/n+TatNKyZyaK/jZxfwCGkPTJcG3QqQLoASonbkzsgNv3HRB6BEzFO5MEFrj+PzZGckd2sl80cblsKCgosVj0bLQgKj701GmYJJWfGpnP6A3XDoowqLCoGrpeYZlxgLGwQIyRgn60NwHFMkWuS X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(180628864354917); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(93006095)(93001095)(3002001)(10201501046)(3231254)(944501410)(52105095)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123562045)(20161123560045)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011); SRVR:VI1PR0802MB2143; BCL:0; PCL:0; RULEID:; SRVR:VI1PR0802MB2143; X-Forefront-PRVS: 06691A4183 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(376002)(39860400002)(346002)(396003)(189003)(199004)(377424004)(476003)(956004)(11346002)(2616005)(97736004)(4326008)(48376002)(53936002)(2906002)(50466002)(446003)(66066001)(52116002)(76176011)(2351001)(72206003)(68736007)(51416003)(86362001)(47776003)(6116002)(386003)(7696005)(3846002)(1076002)(6486002)(26005)(6666003)(25786009)(16586007)(316002)(478600001)(486006)(53416004)(2361001)(8676002)(81156014)(50226002)(5660300001)(81166006)(305945005)(7736002)(36756003)(105586002)(8936002)(106356001)(6916009)(44832011)(186003)(16526019); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR0802MB2143; H:C02TF0U7HF1T.arm.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: arm.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR0802MB2143; 23:xZDpiLdhxlJ1KtE6PQSBZ/uwzvTvrGNTaWAloQ/?= =?us-ascii?Q?eJ54PXxjtzbc51Sh7/MS2BJ1vK2iaM6WZVBiG9Yx+pKoJ7jVGZ1oHV4F6uNr?= =?us-ascii?Q?7FVvQgwSOb74OUJfItDVnsAo0o+GV5SOD6+5BYHYZxo2HW73anQhBs4f6Zay?= =?us-ascii?Q?YjxO6pM5TOzyYbX4pBPZNzaBsFfv+VKIofMtJOom8x6vqHfQNZgrAU645bBm?= =?us-ascii?Q?ZoCUbA8nQmjzYHrEySQvDbu0g2uspzMmnr4zRUgU8G+hhkRCUm9kONi08B0D?= =?us-ascii?Q?IhGn85u+PXoKOjVxJ3l1CgD2pbwZIM3uFyX6w6RI1mwRH9BlrW/wizjQ3wb8?= =?us-ascii?Q?kZyofi9W0sMcCYFZdVhSQJszwAbmk9IrhikWzf3HUdC9p1yk/tvvLpD25YwI?= =?us-ascii?Q?5ZfDRxF53UNV/n2LDpKNqZQr9IoC6XaquDodrZK6xwSagJk1+1pm4WUf95MJ?= =?us-ascii?Q?nwpJXRE/bFxyMa4TDiRUo/yvTPqym4HwZU8CIpabeIPHk2rxsof4fTNi+DCj?= =?us-ascii?Q?fE1XZqgsN8gDFxjYVjo91DdBoJfxzczpqwHOm5PNVingakqm+ou1U01tt+/h?= =?us-ascii?Q?L2L2JPqGcaRbVdIEpa75m+GyodPANf4j8vhZ8zAwU4hKYLsQS0MLOuCypIqq?= =?us-ascii?Q?rGZ8miV5z3FCpmyOQxa08VqiuzdgIA3RVrDCATWRkId/6r9WbXyyllBXjkdT?= =?us-ascii?Q?pezzd9/TfR9TphkHZnnOl+xdn9yQRS4hzFrzrYM3jcqBLvBSWTgCBAb/TX2A?= =?us-ascii?Q?ie7SfPe/GVJGfqcwIklWZdi6mtSKRmoSQlF0KLiXY7NMXBOZI88h6xpClnBc?= =?us-ascii?Q?fyQOL3FpDBbnO/q1uq6qlhPYOBSptvTTI9N0hy+vEpYEDFM5qGAodq8wM7p3?= =?us-ascii?Q?6wo45GZej3LAr+qxkEF/p8n1z9UwQ8a1GHfIIbngar/irDUtDtXGduVv3HKq?= =?us-ascii?Q?jiazurJGG53oeF/fdd5ZqM6n/ky+HKffwZW1CYYxlrPgQj7ZVYiEdjRX8xBC?= =?us-ascii?Q?xEJLYrOgKhEvWjUsOhApp8xukp4oFqirFlaueHYrG0rukzFvu+DNMdSRXXrA?= =?us-ascii?Q?1GtSQgcvNKxorm0T1sakQNJJoBcGXnO2tbJy6tXka0kCqAw9YJFsIUbm60bs?= =?us-ascii?Q?fonK8LSGkmew9vdJJu1Ff5+lzFdSqxObtEZQQ24P9u/aESu4Ck4d5ftvNOMD?= =?us-ascii?Q?rHp/Yc1uV2IzddqVlufPWyRJF/KH5JZ70IY+THlVP/0l9sHGdmVZFw855twX?= =?us-ascii?Q?5yMkCVF1uLZ5dOL+8UA47Qt1Oa5wQ3lB/tb5DRXIU0b5+6FZbEPED0kEJJb2?= =?us-ascii?Q?Wg/dg7xtqygUJ356XMA2PjqQ=3D?= X-Microsoft-Antispam-Message-Info: b07tqMQF1ATd6SOYm5n9uqJ99ObBAlFHCaybAvtVfuWQybSQt6goclewxCfoOEtfS/gk/mNk5dsEZP/jeQhcjKePhlTIcjs6XtTAAoxdZBCHx7+3IPPURVRoxLUw3YfGyN83nGX8gGoXNrjxxXwyAUcgjkFIEOXUY+LF7tP5Si01HNGpFnfw0g75d0cb+wz7 X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2143; 6:n9dbACyEzxugVrAwIVzGa8mZaKNwI/w0JxuDP3heE8fsdA7mp3tDb3g55Rl9aR51tF6zJ0JfWcAWgBNOxAXh1bGR9HmYR0oMPz3aMNqC4eBgWmPi8KhIk971uPnrgly2T9MCHtCv6GDmuL0S2ArLRDRPbq4HBGGerGNHWfBzGItGh/wRc68EoB1vRm8Lw8Ldjo2lkEXTxX/QLc8Y3z5i3nq1yEbYrdfYLFHgdvATtXBD8WFSUCRkWT214dJLgkILoFICq+Rk4851O6UW/KznhUlPpZmOiX7p/fapJEDGyG635/4reN2raqhH+gSyNQrl5nUpSwLLfZ/8XYhJBAVg0vGv8BsMGOqC7VVTxnfKQpU0DNovTMjMksVvWTlGnTS2UwF1cQK36SfXV9GmA6Bs6f1ph/TeE0uPslZgcex2ahS9hUTU9p2nYD7bDZIaLAjdn7sfd/qBAMADbU6zlODNcg==; 5:HEwh68UcIwREori8/mCgiVESYKpcbKL8Xn/i0RBSM0+X8J7mVHrgX1kW+WqBFU+COSFl/y6iuTyRJZ2ZmcP/ySfcIBZsXruk8UUm6FHRboO414jXlElrrX2OxAlXFh++vJLW3ckNdK8Za0anziGV/bEofBYrIZ9O5ONMcJ4MqJw=; 24:b1FeDmSH8/3xhW/LHjtB5RkBlea0q7xUcL8aGOgpiCySV1n3wsAVeSPVeTPn38I9EfjwCXterXvyKkCYzSPe7qRtrLGmSme2jEHuyWIEM94= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2143; 7:utP9tNO5SXT1Uc0L4tfIbSmBySxmX+elsBOOAMbV9d/F36Xu6XTCozaiLMEzA+QfmlyL7Zm252zow5aheLgyLvaSDRQLT/2/j72ORo2K8mwXFA7h1yI+Yrm0gAhzHp4P8CYlYZ1Rt2VR4H3/sIQB5rTO4i5+93hpikuXcpUEvHFC1aRcF0Q1Qi+VCrMPJbHI2+V61twovX80nQwjNKwdzDZw4X6W3sC6An79ZNGQAtLxn6EbzohiPug7P++XS7pP X-MS-Office365-Filtering-Correlation-Id: 3513ae8b-a7c1-4d6c-2e8d-08d5b72d5fa9 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2018 10:53:04.5377 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3513ae8b-a7c1-4d6c-2e8d-08d5b72d5fa9 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0802MB2143 X-IsSubscribed: yes Reduce code copy/paste by adding two helper functions for aarch64_pseudo_read_value and aarch64_pseudo_write The patch does not change any functionality. 2018-05-11 Alan Hayward * aarch64-tdep.c (aarch64_pseudo_read_value_2): New helper func. (aarch64_pseudo_write_2): Likewise. (aarch64_pseudo_read_value): Use helper. (aarch64_pseudo_write): Likewise. --- gdb/aarch64-tdep.c | 173 +++++++++++++++++------------------------------------ 1 file changed, 54 insertions(+), 119 deletions(-) diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c index 7893579d58..003fefb3c9 100644 --- a/gdb/aarch64-tdep.c +++ b/gdb/aarch64-tdep.c @@ -2247,109 +2247,67 @@ aarch64_pseudo_register_reggroup_p (struct gdbarch *gdbarch, int regnum, return group == all_reggroup; } +/* Inner version of aarch64_pseudo_read_value. */ + +static struct value * +aarch64_pseudo_read_value_2 (readable_regcache *regcache, int regnum_offset, + int regsize, struct value *result_value) +{ + gdb_byte reg_buf[V_REGISTER_SIZE]; + unsigned v_regnum = AARCH64_V0_REGNUM + regnum_offset; + + if (regcache->raw_read (v_regnum, reg_buf) != REG_VALID) + mark_value_bytes_unavailable (result_value, 0, + TYPE_LENGTH (value_type (result_value))); + else + memcpy (value_contents_raw (result_value), reg_buf, regsize); + return result_value; + } + /* Implement the "pseudo_register_read_value" gdbarch method. */ static struct value * -aarch64_pseudo_read_value (struct gdbarch *gdbarch, - readable_regcache *regcache, +aarch64_pseudo_read_value (struct gdbarch *gdbarch, readable_regcache *regcache, int regnum) { - gdb_byte reg_buf[V_REGISTER_SIZE]; - struct value *result_value; - gdb_byte *buf; + struct value *result_value = allocate_value (register_type (gdbarch, regnum)); - result_value = allocate_value (register_type (gdbarch, regnum)); VALUE_LVAL (result_value) = lval_register; VALUE_REGNUM (result_value) = regnum; - buf = value_contents_raw (result_value); regnum -= gdbarch_num_regs (gdbarch); if (regnum >= AARCH64_Q0_REGNUM && regnum < AARCH64_Q0_REGNUM + 32) - { - enum register_status status; - unsigned v_regnum; - - v_regnum = AARCH64_V0_REGNUM + regnum - AARCH64_Q0_REGNUM; - status = regcache->raw_read (v_regnum, reg_buf); - if (status != REG_VALID) - mark_value_bytes_unavailable (result_value, 0, - TYPE_LENGTH (value_type (result_value))); - else - memcpy (buf, reg_buf, Q_REGISTER_SIZE); - return result_value; - } + return aarch64_pseudo_read_value_2 (regcache, regnum - AARCH64_Q0_REGNUM, + Q_REGISTER_SIZE, result_value); if (regnum >= AARCH64_D0_REGNUM && regnum < AARCH64_D0_REGNUM + 32) - { - enum register_status status; - unsigned v_regnum; - - v_regnum = AARCH64_V0_REGNUM + regnum - AARCH64_D0_REGNUM; - status = regcache->raw_read (v_regnum, reg_buf); - if (status != REG_VALID) - mark_value_bytes_unavailable (result_value, 0, - TYPE_LENGTH (value_type (result_value))); - else - memcpy (buf, reg_buf, D_REGISTER_SIZE); - return result_value; - } + return aarch64_pseudo_read_value_2 (regcache, regnum - AARCH64_D0_REGNUM, + D_REGISTER_SIZE, result_value); if (regnum >= AARCH64_S0_REGNUM && regnum < AARCH64_S0_REGNUM + 32) - { - enum register_status status; - unsigned v_regnum; - - v_regnum = AARCH64_V0_REGNUM + regnum - AARCH64_S0_REGNUM; - status = regcache->raw_read (v_regnum, reg_buf); - if (status != REG_VALID) - mark_value_bytes_unavailable (result_value, 0, - TYPE_LENGTH (value_type (result_value))); - else - memcpy (buf, reg_buf, S_REGISTER_SIZE); - return result_value; - } + return aarch64_pseudo_read_value_2 (regcache, regnum - AARCH64_S0_REGNUM, + S_REGISTER_SIZE, result_value); if (regnum >= AARCH64_H0_REGNUM && regnum < AARCH64_H0_REGNUM + 32) - { - enum register_status status; - unsigned v_regnum; - - v_regnum = AARCH64_V0_REGNUM + regnum - AARCH64_H0_REGNUM; - status = regcache->raw_read (v_regnum, reg_buf); - if (status != REG_VALID) - mark_value_bytes_unavailable (result_value, 0, - TYPE_LENGTH (value_type (result_value))); - else - memcpy (buf, reg_buf, H_REGISTER_SIZE); - return result_value; - } + return aarch64_pseudo_read_value_2 (regcache, regnum - AARCH64_H0_REGNUM, + H_REGISTER_SIZE, result_value); if (regnum >= AARCH64_B0_REGNUM && regnum < AARCH64_B0_REGNUM + 32) - { - enum register_status status; - unsigned v_regnum; - - v_regnum = AARCH64_V0_REGNUM + regnum - AARCH64_B0_REGNUM; - status = regcache->raw_read (v_regnum, reg_buf); - if (status != REG_VALID) - mark_value_bytes_unavailable (result_value, 0, - TYPE_LENGTH (value_type (result_value))); - else - memcpy (buf, reg_buf, B_REGISTER_SIZE); - return result_value; - } + return aarch64_pseudo_read_value_2 (regcache, regnum - AARCH64_B0_REGNUM, + B_REGISTER_SIZE, result_value); gdb_assert_not_reached ("regnum out of bound"); } -/* Implement the "pseudo_register_write" gdbarch method. */ +/* Inner version of aarch64_pseudo_write. */ static void -aarch64_pseudo_write (struct gdbarch *gdbarch, struct regcache *regcache, - int regnum, const gdb_byte *buf) +aarch64_pseudo_write_2 (struct regcache *regcache, int regnum_offset, + int regsize, const gdb_byte *buf) { gdb_byte reg_buf[V_REGISTER_SIZE]; + unsigned v_regnum = AARCH64_V0_REGNUM + regnum_offset; /* Ensure the register buffer is zero, we want gdb writes of the various 'scalar' pseudo registers to behavior like architectural @@ -2357,61 +2315,38 @@ aarch64_pseudo_write (struct gdbarch *gdbarch, struct regcache *regcache, zero. */ memset (reg_buf, 0, sizeof (reg_buf)); + memcpy (reg_buf, buf, regsize); + regcache->raw_write (v_regnum, reg_buf); +} + +/* Implement the "pseudo_register_write" gdbarch method. */ + +static void +aarch64_pseudo_write (struct gdbarch *gdbarch, struct regcache *regcache, + int regnum, const gdb_byte *buf) +{ + regnum -= gdbarch_num_regs (gdbarch); if (regnum >= AARCH64_Q0_REGNUM && regnum < AARCH64_Q0_REGNUM + 32) - { - /* pseudo Q registers */ - unsigned v_regnum; - - v_regnum = AARCH64_V0_REGNUM + regnum - AARCH64_Q0_REGNUM; - memcpy (reg_buf, buf, Q_REGISTER_SIZE); - regcache_raw_write (regcache, v_regnum, reg_buf); - return; - } + return aarch64_pseudo_write_2 (regcache, regnum - AARCH64_Q0_REGNUM, + Q_REGISTER_SIZE, buf); if (regnum >= AARCH64_D0_REGNUM && regnum < AARCH64_D0_REGNUM + 32) - { - /* pseudo D registers */ - unsigned v_regnum; - - v_regnum = AARCH64_V0_REGNUM + regnum - AARCH64_D0_REGNUM; - memcpy (reg_buf, buf, D_REGISTER_SIZE); - regcache_raw_write (regcache, v_regnum, reg_buf); - return; - } + return aarch64_pseudo_write_2 (regcache, regnum - AARCH64_D0_REGNUM, + D_REGISTER_SIZE, buf); if (regnum >= AARCH64_S0_REGNUM && regnum < AARCH64_S0_REGNUM + 32) - { - unsigned v_regnum; - - v_regnum = AARCH64_V0_REGNUM + regnum - AARCH64_S0_REGNUM; - memcpy (reg_buf, buf, S_REGISTER_SIZE); - regcache_raw_write (regcache, v_regnum, reg_buf); - return; - } + return aarch64_pseudo_write_2 (regcache, regnum - AARCH64_S0_REGNUM, + S_REGISTER_SIZE, buf); if (regnum >= AARCH64_H0_REGNUM && regnum < AARCH64_H0_REGNUM + 32) - { - /* pseudo H registers */ - unsigned v_regnum; - - v_regnum = AARCH64_V0_REGNUM + regnum - AARCH64_H0_REGNUM; - memcpy (reg_buf, buf, H_REGISTER_SIZE); - regcache_raw_write (regcache, v_regnum, reg_buf); - return; - } + return aarch64_pseudo_write_2 (regcache, regnum - AARCH64_H0_REGNUM, + H_REGISTER_SIZE, buf); if (regnum >= AARCH64_B0_REGNUM && regnum < AARCH64_B0_REGNUM + 32) - { - /* pseudo B registers */ - unsigned v_regnum; - - v_regnum = AARCH64_V0_REGNUM + regnum - AARCH64_B0_REGNUM; - memcpy (reg_buf, buf, B_REGISTER_SIZE); - regcache_raw_write (regcache, v_regnum, reg_buf); - return; - } + return aarch64_pseudo_write_2 (regcache, regnum - AARCH64_B0_REGNUM, + B_REGISTER_SIZE, buf); gdb_assert_not_reached ("regnum out of bound"); }