diff options
| author | Richard Sandiford <richard.sandiford@arm.com> | 2024-06-18 12:22:32 +0100 |
|---|---|---|
| committer | Richard Sandiford <richard.sandiford@arm.com> | 2024-06-18 12:22:32 +0100 |
| commit | e0700fbe35286d31fe64782b255c8d2caec673dc (patch) | |
| tree | 1e062c18c726c5e2f5dbadd62b3874e7af9c90dd /gcc/explow.cc | |
| parent | a573ed4367ee685fb1bc50b79239b8b4b69872ee (diff) | |
| download | gcc-e0700fbe35286d31fe64782b255c8d2caec673dc.zip gcc-e0700fbe35286d31fe64782b255c8d2caec673dc.tar.gz gcc-e0700fbe35286d31fe64782b255c8d2caec673dc.tar.bz2 | |
Add force_highpart_subreg
This patch adds a force_highpart_subreg to go along with the
recently added force_lowpart_subreg.
gcc/
* explow.h (force_highpart_subreg): Declare.
* explow.cc (force_highpart_subreg): New function.
* builtins.cc (expand_builtin_issignaling): Use it.
* expmed.cc (emit_store_flag_1): Likewise.
Diffstat (limited to 'gcc/explow.cc')
| -rw-r--r-- | gcc/explow.cc | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/gcc/explow.cc b/gcc/explow.cc index 2a91cf7..b4a0df8 100644 --- a/gcc/explow.cc +++ b/gcc/explow.cc @@ -778,6 +778,20 @@ force_lowpart_subreg (machine_mode outermode, rtx op, return force_subreg (outermode, op, innermode, byte); } +/* Try to return an rvalue expression for the OUTERMODE highpart of OP, + which has mode INNERMODE. Allow OP to be forced into a new register + if necessary. + + Return null on failure. */ + +rtx +force_highpart_subreg (machine_mode outermode, rtx op, + machine_mode innermode) +{ + auto byte = subreg_highpart_offset (outermode, innermode); + return force_subreg (outermode, op, innermode, byte); +} + /* If X is a memory ref, copy its contents to a new temp reg and return that reg. Otherwise, return X. */ |
