Commit 0fad9ab9 by Nick Clifton Committed by Nick Clifton

frvbegin.c: Fix location of unwind-dw2-fde.h header file.

	* config/frv/frvbegin.c: Fix location of unwind-dw2-fde.h header
	file.
	* config/frv/frvend.c: Likewise.
	* config/frv/frv.c (frv_function_prologue): Move misplaced
	CALL_ARG_LOCATION notes back to their proper locations.

Co-Authored-By: Bernd Schmidt <bernds@codesourcery.com>

From-SVN: r179363
parent b24a9835
2011-09-29 Nick Clifton <nickc@redhat.com>
Bernd Schmidt <bernds@codesourcery.com>
* config/frv/frvbegin.c: Fix location of unwind-dw2-fde.h header
file.
* config/frv/frvend.c: Likewise.
* config/frv/frv.c (frv_function_prologue): Move misplaced
CALL_ARG_LOCATION notes back to their proper locations.
2011-09-29 Georg-Johann Lay <avr@gjlay.de>
PR target/50566
......@@ -1424,6 +1424,8 @@ frv_function_contains_far_jump (void)
static void
frv_function_prologue (FILE *file, HOST_WIDE_INT size ATTRIBUTE_UNUSED)
{
rtx insn, next, last_call;
/* If no frame was created, check whether the function uses a call
instruction to implement a far jump. If so, save the link in gr3 and
replace all returns to LR with returns to GR3. GR3 is used because it
......@@ -1464,6 +1466,32 @@ frv_function_prologue (FILE *file, HOST_WIDE_INT size ATTRIBUTE_UNUSED)
/* Allow the garbage collector to free the nops created by frv_reorg. */
memset (frv_nops, 0, sizeof (frv_nops));
/* Locate CALL_ARG_LOCATION notes that have been misplaced
and move them back to where they should be located. */
last_call = NULL_RTX;
for (insn = get_insns (); insn; insn = next)
{
next = NEXT_INSN (insn);
if (CALL_P (insn)
|| (INSN_P (insn) && GET_CODE (PATTERN (insn)) == SEQUENCE
&& CALL_P (XVECEXP (PATTERN (insn), 0, 0))))
last_call = insn;
if (!NOTE_P (insn) || NOTE_KIND (insn) != NOTE_INSN_CALL_ARG_LOCATION)
continue;
if (NEXT_INSN (last_call) == insn)
continue;
NEXT_INSN (PREV_INSN (insn)) = NEXT_INSN (insn);
PREV_INSN (NEXT_INSN (insn)) = PREV_INSN (insn);
PREV_INSN (insn) = last_call;
NEXT_INSN (insn) = NEXT_INSN (last_call);
PREV_INSN (NEXT_INSN (insn)) = insn;
NEXT_INSN (PREV_INSN (insn)) = insn;
last_call = insn;
}
}
......
......@@ -28,7 +28,7 @@
#include "defaults.h"
#include <stddef.h>
#include "unwind-dw2-fde.h"
#include "../libgcc/unwind-dw2-fde.h"
#include "gbl-ctors.h"
/* Declare a pointer to void function type. */
......
......@@ -25,7 +25,7 @@
#include "defaults.h"
#include <stddef.h>
#include "unwind-dw2-fde.h"
#include "../libgcc/unwind-dw2-fde.h"
#ifdef __FRV_UNDERSCORE__
#define UNDERSCORE "_"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment