From 9d52da2f217d5b9a4fef5090251025f6a99bb108 Mon Sep 17 00:00:00 2001 From: Daniel Cederman Date: Wed, 29 Nov 2017 15:45:41 +0000 Subject: [PATCH] [SPARC] Recognize the load when accessing the GOT Needed for the UT699 errata workaround to function correctly when compiling with -fPIC. 2017-11-29 Daniel Cederman gcc/ * config/sparc/sparc.c (sparc_do_work_around_errata): Treat the movsi_pic_gotdata_op instruction as a load for the UT699 errata workaround. From-SVN: r255239 --- gcc/ChangeLog | 6 ++++++ gcc/config/sparc/sparc.c | 8 +++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a00174a..1909945 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2017-11-29 Daniel Cederman + + * config/sparc/sparc.c (sparc_do_work_around_errata): Treat the + movsi_pic_gotdata_op instruction as a load for the UT699 errata + workaround. + 2017-11-29 Martin Aberg * config/sparc/sparc.md (divdf3_fix): Add NOP and adjust length diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c index 64c88de..dac6483 100644 --- a/gcc/config/sparc/sparc.c +++ b/gcc/config/sparc/sparc.c @@ -1321,7 +1321,8 @@ sparc_do_work_around_errata (void) && NONJUMP_INSN_P (insn) && (set = single_set (insn)) != NULL_RTX && GET_MODE_SIZE (GET_MODE (SET_SRC (set))) <= 4 - && mem_ref (SET_SRC (set)) != NULL_RTX + && (mem_ref (SET_SRC (set)) != NULL_RTX + || INSN_CODE (insn) == CODE_FOR_movsi_pic_gotdata_op) && REG_P (SET_DEST (set)) && REGNO (SET_DEST (set)) < 32) { @@ -1359,6 +1360,11 @@ sparc_do_work_around_errata (void) && REGNO (src) != REGNO (x))) && !reg_mentioned_p (x, XEXP (dest, 0))) insert_nop = true; + + /* GOT accesses uses LD. */ + else if (INSN_CODE (next) == CODE_FOR_movsi_pic_gotdata_op + && !reg_mentioned_p (x, XEXP (XEXP (src, 0), 1))) + insert_nop = true; } } -- 2.7.4