aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/rs6000/rs6000.c
diff options
context:
space:
mode:
authorMichael Meissner <meissner@gcc.gnu.org>1996-07-10 19:12:59 +0000
committerMichael Meissner <meissner@gcc.gnu.org>1996-07-10 19:12:59 +0000
commitc4c4037309a400397313e01b3fd7c38ae2264acf (patch)
tree651af82f9d39d7e3e23414fb6406500a5b08b10f /gcc/config/rs6000/rs6000.c
parenta72734717c6437270db05b0423c99c99fcaf7798 (diff)
downloadgcc-c4c4037309a400397313e01b3fd7c38ae2264acf.zip
gcc-c4c4037309a400397313e01b3fd7c38ae2264acf.tar.gz
gcc-c4c4037309a400397313e01b3fd7c38ae2264acf.tar.bz2
Use integer ops to load SF constants for software floating point; fix up software floating constants in general
From-SVN: r12421
Diffstat (limited to 'gcc/config/rs6000/rs6000.c')
-rw-r--r--gcc/config/rs6000/rs6000.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 408661c..7b78960 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -373,6 +373,24 @@ rs6000_immed_double_const (i0, i1, mode)
}
+/* Return the GOT register, creating it if needed. */
+
+struct rtx_def *
+rs6000_got_register (value)
+ rtx value;
+{
+ if (!pic_offset_table_rtx)
+ {
+ if (reload_in_progress || reload_completed)
+ fatal_insn ("internal error -- needed new GOT register during reload phase to load:", value);
+
+ pic_offset_table_rtx = gen_reg_rtx (SImode);
+ }
+
+ return pic_offset_table_rtx;
+}
+
+
/* Return non-zero if this function is known to have a null epilogue. */
int
@@ -614,7 +632,7 @@ num_insns_constant (op, mode)
rtx op;
enum machine_mode mode;
{
- if (mode != SImode && mode != DImode)
+ if (mode != SImode && mode != DImode && mode != SFmode && mode != DFmode)
abort ();
if (GET_CODE (op) == CONST_INT)