updates for 2.3
authorChris Smith <cks@gnu.org>
Wed, 14 Oct 1992 01:27:21 +0000 (01:27 +0000)
committerChris Smith <cks@gnu.org>
Wed, 14 Oct 1992 01:27:21 +0000 (01:27 +0000)
From-SVN: r2448

gcc/config/convex/convex.h
gcc/config/convex/convex.md

index 72b04403949794e740628591d383a5228693ba0d..15b26a8fe94d475b1822b8f5b86d847498abec2c 100644 (file)
@@ -96,6 +96,11 @@ extern char *output_call ();
 #define TARGET_DEFAULT 0
 #endif
 
+/* Convex ships /tmp as a separate file system - thus it
+   usually has more free space than /usr/tmp */
+
+#define P_tmpdir       "/tmp/"
+
 /* Allow $ in identifiers. */
 
 #define DOLLARS_IN_IDENTIFIERS 2
@@ -399,7 +404,7 @@ enum reg_class {
 /* The standard Convex call, with arg count word, includes popping the
    args as part of the call template.  We optionally omit the arg count
    word and let gcc combine the arg pops. */
-#define RETURN_POPS_ARGS(FUNTYPE,SIZE) (TARGET_ARGCOUNT)
+#define RETURN_POPS_ARGS(FUNTYPE, SIZE) (TARGET_ARGCOUNT ? (SIZE) : 0)
 
 /* Define how to find the value returned by a function.
    VALTYPE is the data type of the value (as a tree).
@@ -841,6 +846,12 @@ enum reg_class {
 
 #define ASM_APP_OFF ";NO_APP\n"
 
+/* Output something following the gcc2_compiled tag to keep that label from
+   hiding a real function name for tools like adb and prof. */
+
+#define ASM_IDENTIFY_GCC(FILE) \
+  fprintf (FILE, "gcc2_compiled.:\n\tds.h 0\n");
+
 /* Alignment with Convex's assembler goes like this:
    .text can be .aligned up to a halfword.
    .data and .bss can be .aligned up to a longword.
index a9e933670a3552b5cc7d4ace83ad2a0f799d7c0b..81858b4158336c68e54d9439b34101cc8989267c 100644 (file)
   [(set (match_operand:DI 0 "register_operand" "=d")
        (and:DI (match_operand:DI 1 "register_operand" "%0")
                (match_operand:DI 2 "immediate_operand" "Fn")))]
-  "GET_CODE (operands[2]) == CONST_INT
+  "(GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) < 0)
    || (GET_CODE (operands[2]) == CONST_DOUBLE
        && CONST_DOUBLE_HIGH (operands[2]) == -1)"
   "and %2,%0")
   [(set (match_operand:DI 0 "register_operand" "=d")
        (ior:DI (match_operand:DI 1 "register_operand" "%0")
                (match_operand:DI 2 "immediate_operand" "Fn")))]
-  "GET_CODE (operands[2]) == CONST_INT
+  "(GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) >= 0)
    || (GET_CODE (operands[2]) == CONST_DOUBLE
        && CONST_DOUBLE_HIGH (operands[2]) == 0)"
   "or %2,%0")
   [(set (match_operand:DI 0 "register_operand" "=d")
        (xor:DI (match_operand:DI 1 "register_operand" "%0")
                (match_operand:DI 2 "immediate_operand" "Fn")))]
-  "GET_CODE (operands[2]) == CONST_INT
+  "(GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) >= 0)
    || (GET_CODE (operands[2]) == CONST_DOUBLE
        && CONST_DOUBLE_HIGH (operands[2]) == 0)"
   "xor %2,%0")
   if (GET_CODE (operands[2]) == CONST_INT)
     {
       int rshift = INTVAL (operands[2]);
-      operands[3] =
-       force_reg (DImode, immed_double_const (1 << (63 - rshift),
-                                              1 << (31 - rshift), DImode));
+      if (rshift < 0)
+       operands[3] = force_reg (DImode, immed_double_const (0, 0, DImode));
+      else if (rshift < 32)
+       operands[3] =
+         force_reg (DImode,
+                    immed_double_const (0, 1 << (31 - rshift), DImode));
+      else if (rshift < 64)
+       operands[3] =
+         force_reg (DImode,
+                    immed_double_const (1 << (63 - rshift), 0, DImode));
+      else
+       operands[3] = force_reg (DImode, immed_double_const (0, 0, DImode));
     }
   else
     {
 
 (define_insn "call"
   [(call (match_operand:QI 0 "memory_operand" "m")
-        (match_operand:SI 1 "general_operand" "g"))]
+        (match_operand 1 "" "g"))]
   ""
   "* return output_call (insn, operands[0], operands[1]);")
 
 (define_insn "call_value"
   [(set (match_operand 0 "" "=g")
        (call (match_operand:QI 1 "memory_operand" "m")
-             (match_operand:SI 2 "general_operand" "g")))]
+             (match_operand 2 "" "g")))]
   ""
   "* return output_call (insn, operands[1], operands[2]);")