[mep] further refinements of cross-vliw jumps

DJ Delorie dj@redhat.com
Wed Jul 15 02:23:00 GMT 2009


Committed.

	* config/mep/mep.md (sibcall_internal): Include non-toggling
	non-jmp case.
	(sibcall_value_internal): Likewise.

Index: config/mep/mep.md
===================================================================
--- config/mep/mep.md	(revision 149644)
+++ config/mep/mep.md	(working copy)
@@ -1922,12 +1922,16 @@
    (clobber (reg:SI REGSAVE_CONTROL_TEMP))
   ]
   "SIBLING_CALL_P (insn)"
 {
   if (mep_vliw_jmp_match (operands[2]))
     return "jmp\t%0";
+  else if (mep_vliw_mode_match (operands[2]))
+    return
+        "movu	$11, %0\n\
+	jmp	$11";
   else
     return
 	"ldc	$12, $lp\n\
 	movh	$11, %%hi(%0)\n\
 	xor3	$12, $12, 1\n\
 	add3	$11, $11, %%lo(%0+1)\n\
@@ -1993,12 +1997,16 @@
    (clobber (reg:SI REGSAVE_CONTROL_TEMP))
   ]
   "SIBLING_CALL_P (insn)"
 {
   if (mep_vliw_jmp_match (operands[3]))
     return "jmp\t%1";
+  else if (mep_vliw_mode_match (operands[3]))
+    return
+        "movu	$11, %1\n\
+	jmp	$11";
   else
     return
 	"ldc	$12, $lp\n\
 	movh	$11, %%hi(%1)\n\
 	xor3	$12, $12, 1\n\
 	add3	$11, $11, %%lo(%1+1)\n\



More information about the Gcc-patches mailing list