From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28751 invoked by alias); 8 Apr 2009 21:09:01 -0000 Received: (qmail 28740 invoked by uid 22791); 8 Apr 2009 21:09:00 -0000 X-SWARE-Spam-Status: No, hits=-2.5 required=5.0 tests=AWL,BAYES_00,SPF_HELO_PASS,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (66.187.233.31) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 08 Apr 2009 21:08:54 +0000 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id n38L8qhd014888 for ; Wed, 8 Apr 2009 17:08:52 -0400 Received: from greed.delorie.com (vpn-12-136.rdu.redhat.com [10.11.12.136]) by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n38L8vCt004941 for ; Wed, 8 Apr 2009 17:08:57 -0400 Received: from greed.delorie.com (greed.delorie.com [127.0.0.1] (may be forged)) by greed.delorie.com (8.14.3/8.14.3) with ESMTP id n38L8pW5002053; Wed, 8 Apr 2009 17:08:51 -0400 Received: (from dj@localhost) by greed.delorie.com (8.14.3/8.14.3/Submit) id n38L8pV7002050; Wed, 8 Apr 2009 17:08:51 -0400 Date: Wed, 08 Apr 2009 21:09:00 -0000 Message-Id: <200904082108.n38L8pV7002050@greed.delorie.com> From: DJ Delorie To: cgen@sourceware.org Subject: intrinsics.scm patch Mailing-List: contact cgen-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cgen-owner@sourceware.org X-SW-Source: 2009-q2/txt/msg00007.txt.bz2 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"