This is the mail archive of the
cgen@sourceware.org
mailing list for the CGEN project.
intrinsics.scm patch
- From: DJ Delorie <dj at redhat dot com>
- To: cgen at sourceware dot org
- Date: Wed, 8 Apr 2009 17:08:51 -0400
- Subject: intrinsics.scm patch
The routines in intrinsics.scm exist to provide intrinsics definitions
to GCC. However, the way GCC's internals work has changed since they
were written, and some aspects are no longer supportable. This patch
updates the intrinsics support as such:
* COP* modes are not going to be supported in FSF gcc. Instead,
regular modes will be used and GCC will manage the allocation of
registers according to the insns' needs.
* "pass by reference" no longer works as optimizations are handled at
the tree stage, before we have a chance to insert our
pass-by-reference semantics. Intead, the user must pass the address
of a variable. This happens to make the .h file includable.
* I also add "--syscall--" to the list of "don't make these intrinsics".
The corresponding gcc patch is here:
http://gcc.gnu.org/ml/gcc-patches/2009-03/msg01725.html
Comments? Ok to install?
* intrinsics.scm (guess-mode): Drop COP* syntax.
(need-insn): Add "--syscall--" to the list.
(enum-type): Drop COP* syntax.
(intrinsics.h): Likewise.
(intrinsic-protos.h): Change file header to allow it to be
included.
Index: intrinsics.scm
===================================================================
RCS file: /cvs/src/src/cgen/intrinsics.scm,v
retrieving revision 1.1
diff -p -U3 -r1.1 intrinsics.scm
--- intrinsics.scm 5 Nov 2007 15:46:19 -0000 1.1
+++ intrinsics.scm 8 Apr 2009 20:58:36 -0000
@@ -274,8 +274,8 @@
(cond
((equal? (md-operand:cdata op) 'FMAX_INT) "SI")
((equal? (md-operand:cdata op) 'FMAX_FLOAT) "SF")
- ((is-h-cr64? (md-operand:hw op)) "COPDI")
- ((is-h-cr? (md-operand:hw op)) "COPSI")
+ ((is-h-cr64? (md-operand:hw op)) "DI")
+ ((is-h-cr? (md-operand:hw op)) "SI")
((not (memory? (md-operand:type op))) "SI")
(else #f)))
@@ -1038,7 +1038,7 @@
;; Return true if the given insn should be included in the output files.
(define (need-insn? insn)
- (not (member (insn-mnemonic insn) '("--unused--" "--reserved--"))))
+ (not (member (insn-mnemonic insn) '("--unused--" "--reserved--" "--syscall--"))))
;; Set up global variables, if we haven't already.
(define (analyze-intrinsics!)
@@ -1268,8 +1268,8 @@
(define (enum-type op)
(cond
- ((is-h-cr64? (md-operand:hw op)) "cgen_regnum_operand_type_COPDI")
- ((is-h-cr? (md-operand:hw op)) "cgen_regnum_operand_type_COPSI")
+ ((is-h-cr64? (md-operand:hw op)) "cgen_regnum_operand_type_DI")
+ ((is-h-cr? (md-operand:hw op)) "cgen_regnum_operand_type_SI")
(else
(case (md-operand:cdata op)
((POINTER) "cgen_regnum_operand_type_POINTER")
@@ -1395,8 +1395,8 @@
" cgen_regnum_operand_type_USHORT, /* unsigned short */\n"
" cgen_regnum_operand_type_CHAR, /* char */\n"
" cgen_regnum_operand_type_UCHAR, /* unsigned char */\n"
- " cgen_regnum_operand_type_COPSI, /* __cop long */\n"
- " cgen_regnum_operand_type_COPDI, /* __cop long long */\n"
+ " cgen_regnum_operand_type_SI, /* __cop long */\n"
+ " cgen_regnum_operand_type_DI, /* __cop long long */\n"
" cgen_regnum_operand_type_CP_DATA_BUS_INT, /* cp_data_bus_int */\n"
" cgen_regnum_operand_type_DEFAULT = cgen_regnum_operand_type_LONG\n"
"};\n"
@@ -1530,20 +1530,14 @@
(else "long"))
(if (and (not (equal? (md-operand:cdata op) 'REGNUM))
(md-operand:write-index op))
- "&" "")))
+ "*" "")))
(define (intrinsic-protos.h) ; i.e., intrinsics.h
(string-write
"\n\n"
"/* DO NOT EDIT: This file is automatically generated by CGEN.\n"
" Any changes you make will be discarded when it is next regenerated.\n"
- "\n"
- " FURTHERMORE: this file serves only as documentation and must not be included\n "
- " in any application code which wishes to use intrinsics. */\n"
- "\n\n"
- "#error \"This file must not be included in any application code which uses intrinsics.\"\n"
- "#error \"It is here for documentation purposes ONLY.\"\n"
- "\n\n"
+ "*/\n\n"
"#if __MEP_CONFIG_CP_DATA_BUS_WIDTH == 64\n"
" typedef long long cp_data_bus_int;\n"
"#else\n"