diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ab034ae1195a72627167896890d4e6a96f3b96f8..5abaefd2e218b1bcfe447934658d68d9b0442158 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2003-10-20  Zack Weinberg  <zack@codesourcery.com>
+
+	* config/i386/i386.c (print_reg): Abort if REGNO (x) is a
+	virtual register, but only if file == asm_out_file.
+	* config/i386/i386.h (HI_REGISTER_NAMES): Use "argp", not "",
+	for ARG_POINTER_REGNUM.
+
 2003-10-20  Zack Weinberg  <zack@codesourcery.com>
 
 	* c-common.c (registered_builtin_types): New static.
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index edc8c0e6863ea5005f96cfde710ef4d08672036a..cfdc7d2895169ffec209784b000e0474d2eb4c3a 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -6884,6 +6884,13 @@ put_condition_code (enum rtx_code code, enum machine_mode mode, int reverse,
 void
 print_reg (rtx x, int code, FILE *file)
 {
+  if ((REGNO (x) == ARG_POINTER_REGNUM
+       || REGNO (x) == FRAME_POINTER_REGNUM
+       || REGNO (x) == FLAGS_REG
+       || REGNO (x) == FPSR_REG)
+      && file == asm_out_file)
+    abort ();
+
   if (ASSEMBLER_DIALECT == ASM_ATT || USER_LABEL_PREFIX[0] == 0)
     putc ('%', file);
 
diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
index 5ad5a141ddf07c38733e05aa0eb65cdf176195c5..53f9bcba6b2ec76098e9ae9cb438679776f26e68 100644
--- a/gcc/config/i386/i386.h
+++ b/gcc/config/i386/i386.h
@@ -2747,8 +2747,8 @@ do {							\
 #undef  HI_REGISTER_NAMES
 #define HI_REGISTER_NAMES						\
 {"ax","dx","cx","bx","si","di","bp","sp",				\
- "st","st(1)","st(2)","st(3)","st(4)","st(5)","st(6)","st(7)","",	\
- "flags","fpsr", "dirflag", "frame",					\
+ "st","st(1)","st(2)","st(3)","st(4)","st(5)","st(6)","st(7)",		\
+ "argp", "flags", "fpsr", "dirflag", "frame",				\
  "xmm0","xmm1","xmm2","xmm3","xmm4","xmm5","xmm6","xmm7",		\
  "mm0", "mm1", "mm2", "mm3", "mm4", "mm5", "mm6", "mm7"	,		\
  "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",			\