aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Law <law@gcc.gnu.org>1993-03-20 20:44:15 -0700
committerJeff Law <law@gcc.gnu.org>1993-03-20 20:44:15 -0700
commit72abf941895793587f5234688e903aa7fddd9934 (patch)
tree534e52ca664a929a42d26016bc42ccd649ce7fb0
parent742920c7bdb178d4d6e5eb5baf7f93ba9e2112b6 (diff)
downloadgcc-72abf941895793587f5234688e903aa7fddd9934.zip
gcc-72abf941895793587f5234688e903aa7fddd9934.tar.gz
gcc-72abf941895793587f5234688e903aa7fddd9934.tar.bz2
pa.h (INSN_SETS_ARE_DELAYED): Define for the PA.
* pa.h (INSN_SETS_ARE_DELAYED): Define for the PA. Sets and clobbers that occur in millicode insns are delayed effects. (INSN_REFERENCES_ARE_DELAYED): Likewise but for argument references occuring in millicode insns. From-SVN: r3809
-rw-r--r--gcc/config/pa/pa.h30
1 files changed, 30 insertions, 0 deletions
diff --git a/gcc/config/pa/pa.h b/gcc/config/pa/pa.h
index a4e6d890..f9381eb 100644
--- a/gcc/config/pa/pa.h
+++ b/gcc/config/pa/pa.h
@@ -1431,6 +1431,36 @@ while (0)
if (GET_CODE (INSN) == CALL_INSN \
|| (GET_CODE (INSN) == JUMP_INSN && ! simplejump_p (insn))) \
LENGTH += 1;
+
+/* Millicode insns are actually function calls with some special
+ constraints on arguments and register usage.
+
+ Millicode calls always expect their arguments in the integer argument
+ registers, and always return their result in %r29 (ret1). They
+ are expected to clobber their arguments, %r1, %r29, and %r31 and
+ nothing else.
+
+ These macros tell reorg that the references to arguments and
+ register clobbers for millicode calls do not appear to happen
+ until after the millicode call. This allows reorg to put insns
+ which set the argument registers into the delay slot of the millicode
+ call -- thus they act more like traditional CALL_INSNs.
+
+ get_attr_type will try to recognize the given insn, so make sure to
+ filter out things it will not accept. SEQUENCE and USE insns in
+ particular. */
+#define INSN_SETS_ARE_DELAYED(X) \
+ ((GET_CODE (X) == INSN \
+ && GET_CODE (PATTERN (X)) != SEQUENCE \
+ && GET_CODE (PATTERN (X)) != USE \
+ && get_attr_type (X) == TYPE_MILLI))
+
+#define INSN_REFERENCES_ARE_DELAYED(X) \
+ ((GET_CODE (X) == INSN \
+ && GET_CODE (PATTERN (X)) != SEQUENCE \
+ && GET_CODE (PATTERN (X)) != USE \
+ && get_attr_type (X) == TYPE_MILLI))
+
/* Control the assembler format that we output. */