[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