insn-flags.h insn-codes.h real.h
reg-stack.o : reg-stack.c $(CONFIG_H) $(RTL_H) $(TREE_H) \
regs.h hard-reg-set.h flags.h insn-config.h
-
+
aux-output.o : aux-output.c $(CONFIG_H) \
$(RTL_H) regs.h hard-reg-set.h real.h insn-config.h conditions.h \
insn-flags.h output.h insn-attr.h insn-codes.h
for name in $(LIB1FUNCS); do rm -f $${name}.c; done
# Delete other temporary files.
-rm -f tmp-float.h tmp-*proto.1 tmp-gcc.xtar.Z tmp-limits.h gccnew
+ -rm -f tmp-foo1 tmp-foo2
# Delete the stamp files.
-rm -f stamp-* tmp-*
# Delete debugging dump files.
bootstrap3: force
$(MAKE) CC="stage2/gcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
+# Compare the object files in the current directory with those in the
+# stage2 directory.
+
+compare: force
+ for file in *.o; do \
+ tail +10c $file > tmp-foo1; \
+ tail +10c stage2/$file > tmp-foo2; \
+ cmp tmp-foo1 tmp-foo2 || echo $file differs; \
+ done
+ -rm -f tmp-foo*
+
+# Similar, but compare with stage3 directory
+compare3: force
+ for file in *.o; do \
+ tail +10c $file > tmp-foo1; \
+ tail +10c stage3/$file > tmp-foo2; \
+ cmp tmp-foo1 tmp-foo2 || echo $file differs; \
+ done
+ -rm -f tmp-foo*
+
# Copy the object files from a particular stage into a subdirectory.
stage1: force
-if [ -d stage1 ] ; then true ; else mkdir stage1 ; fi
return (GET_CODE (op) == CONST_INT && (INTVAL (op) & 0xffff0000) == 0);
}
+/* Return 1 if OP is a CONST_INT that cannot fit in a signed D field. */
+
+int
+non_short_cint_operand (op, mode)
+ register rtx op;
+ enum machine_mode mode;
+{
+ return (GET_CODE (op) == CONST_INT
+ && (unsigned) (INTVAL (op) + 0x8000) >= 0x10000);
+}
+
/* Returns 1 if OP is a register that is not special (i.e., not MQ,
ctr, or lr). */
|| (GET_CODE (op) == CONST_INT && (INTVAL (op) & 0xffff) == 0));
}
+/* Return 1 if OP is a constant but not a valid add_operand. */
+
+int
+non_add_cint_operand (op, mode)
+ register rtx op;
+ enum machine_mode mode;
+{
+ return (GET_CODE (op) == CONST_INT
+ && (unsigned) (INTVAL (op) + 0x8000) >= 0x10000
+ && (INTVAL (op) & 0xffff) != 0);
+}
+
/* Return 1 if the operand is a non-special register or a constant that
can be used as the operand of an OR or XOR insn on the RS/6000. */
|| (INTVAL (op) & 0xffff) == 0)));
}
+/* Return 1 if C is a constant that is not a logical operand (as
+ above). */
+
+int
+non_logical_cint_operand (op, mode)
+ register rtx op;
+ enum machine_mode mode;
+{
+ return (GET_CODE (op) == CONST_INT
+ && (INTVAL (op) & 0xffff0000) != 0
+ && (INTVAL (op) & 0xffff) != 0);
+}
+
/* Return 1 if C is a constant that can be encoded in a mask on the
RS/6000. It is if there are no more than two 1->0 or 0->1 transitions.
Reject all ones and all zeros, since these should have been optimized
|| mask_operand (op, mode));
}
+/* Return 1 if the operand is a constant but not a valid operand for an AND
+ insn. */
+
+int
+non_and_cint_operand (op, mode)
+ register rtx op;
+ enum machine_mode mode;
+{
+ return GET_CODE (op) == CONST_INT && ! and_operand (op, mode);
+}
+
/* Return 1 if the operand is a general register or memory operand. */
int
if (j < 0)
{
+ if (j == -3)
+ continue;
+
error ("unknown register name `%s' in `asm'", regname);
return;
}
name++;
return name;
}
-
+\f
/* Decode an `asm' spec for a declaration as a register name.
Return the register number, or -1 if nothing specified,
- or -2 if the name is not a register. Accept an exact spelling or
- a decimal number. Prefixes such as % are optional. */
+ or -2 if the ASMSPEC is not `cc' and is recognized,
+ or -3 if ASMSPEC is `cc' and is not recognized.
+ Accept an exact spelling or a decimal number.
+ Prefixes such as % are optional. */
int
decode_reg_name (asmspec)
}
#endif /* ADDITIONAL_REGISTER_NAMES */
+ if (!strcmp (asmspec, "cc"))
+ return -3;
+
return -2;
}
if (TREE_REGDECL (decl) && reg_number == -1)
error_with_decl (decl,
"register name not specified for `%s'");
- else if (TREE_REGDECL (decl) && reg_number == -2)
+ else if (TREE_REGDECL (decl) && reg_number < 0)
error_with_decl (decl,
"invalid register name for `%s'");
- else if (reg_number >= 0 && ! TREE_REGDECL (decl))
+ else if ((reg_number >= 0 || reg_number == -3) && ! TREE_REGDECL (decl))
error_with_decl (decl,
"register name given for non-register variable `%s'");
else if (TREE_REGDECL (decl) && TREE_CODE (decl) == FUNCTION_DECL)