diff options
author | Michael Meissner <meissner@gcc.gnu.org> | 1996-07-10 19:12:59 +0000 |
---|---|---|
committer | Michael Meissner <meissner@gcc.gnu.org> | 1996-07-10 19:12:59 +0000 |
commit | c4c4037309a400397313e01b3fd7c38ae2264acf (patch) | |
tree | 651af82f9d39d7e3e23414fb6406500a5b08b10f /gcc/config/rs6000/rs6000.c | |
parent | a72734717c6437270db05b0423c99c99fcaf7798 (diff) | |
download | gcc-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.c | 20 |
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) |