This is the mail archive of the cgen@sourceware.org mailing list for the CGEN project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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"


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]