*** objc-act.c	Sun Aug 29 10:46:44 1999
--- /net/user/mgd/objc-act.c	Sat Aug 14 15:43:19 1999
***************
*** 6837,6845 ****
  
        if (TYPE_MODE (type) == SFmode)
  	obstack_1grow (&util_obstack, 'f');
!       else if (TYPE_MODE (type) == DFmode
! 	       || TYPE_MODE (type) == TFmode)
  	obstack_1grow (&util_obstack, 'd');
      }
  
    else if (code == VOID_TYPE)
--- 6909,6918 ----
  
        if (TYPE_MODE (type) == SFmode)
  	obstack_1grow (&util_obstack, 'f');
!       else if (TYPE_MODE (type) == DFmode)
  	obstack_1grow (&util_obstack, 'd');
+       else if (TYPE_MODE (type) == TFmode || TYPE_MODE (type) == XFmode)
+         obstack_1grow (&util_obstack, 'X');
      }
  
    else if (code == VOID_TYPE)
***************
*** 8395,8401 ****
--- 8468,8497 ----
  
        pushdecl (decl);
        rest_of_decl_compilation (decl, 0, 0, 0);
+ #if 1
+       {
+         char *string_ref = (char *) alloca (strlen (string) + 5);
+         tree refdecl;
+ 
+         sprintf (string_ref, "%s_ref", string);
  
+         refdecl = build_decl (VAR_DECL,
+                               get_identifier (string_ref),
+                               const_ptr_type_node);
+         
+         TREE_PUBLIC (refdecl) = 0;
+         TREE_STATIC (refdecl) = 1;
+         TREE_READONLY (refdecl) = 1;
+         TREE_CONSTANT (refdecl) = 1;
+         DECL_CONTEXT (refdecl) = NULL_TREE;
+         DECL_ARTIFICIAL (refdecl) = 1;
+         exp = build1 (ADDR_EXPR, string_type_node, decl);
+         DECL_INITIAL (refdecl) = exp;
+ 
+         make_decl_rtl (refdecl, NULL_PTR, 1);
+         assemble_variable (refdecl, 1, 0, 0);
+       }
+ #else
        /* Make following constant read-only (why not)?  */
        readonly_data_section ();
  
***************
*** 8409,8414 ****
--- 8505,8511 ----
  
        /* Output a constant to reference this address.  */
        output_constant (exp, int_size_in_bytes (string_type_node));
+ #endif
      }
    else
      {
***************
*** 8447,8456 ****
  
        else
  	{
  	  sprintf (string, "%sobjc_class_name_%s",
  		   (flag_next_runtime ? "." : "__"), class_name);
! 	  assemble_global (string);
! 	  assemble_label (string);
  	}
      }
  
--- 8544,8567 ----
  
        else
  	{
+           tree decl;
+ 
  	  sprintf (string, "%sobjc_class_name_%s",
  		   (flag_next_runtime ? "." : "__"), class_name);
! 
!           decl = build_decl (VAR_DECL,
!                              get_identifier (string),
!                              void_type_node);
! 
!           TREE_PUBLIC (decl) = 1;
!           TREE_READONLY (decl) = 1;
!           TREE_CONSTANT (decl) = 1;
!           DECL_CONTEXT (decl) = NULL_TREE;
!           DECL_ARTIFICIAL (decl) = 1;
!           DECL_INITIAL (decl) = decl;
! 
!           make_decl_rtl (decl, NULL_PTR, 1);
!           assemble_variable (decl, 1, 0, 0);
  	}
      }
  
***************
*** 8479,8489 ****
  
        else
  	{
  	  sprintf (string, "%sobjc_category_name_%s_%s",
  		   (flag_next_runtime ? "." : "__"),
  		   class_name, class_super_name);
! 	  assemble_global (string);
! 	  assemble_label (string);
  	}
      }
  }
--- 8590,8614 ----
  
        else
  	{
+           tree decl;
+ 
  	  sprintf (string, "%sobjc_category_name_%s_%s",
  		   (flag_next_runtime ? "." : "__"),
  		   class_name, class_super_name);
! 
!           decl = build_decl (VAR_DECL,
!                              get_identifier (string),
!                              void_type_node);
! 
!           TREE_PUBLIC (decl) = 1;
!           TREE_READONLY (decl) = 1;
!           TREE_CONSTANT (decl) = 1;
!           DECL_CONTEXT (decl) = NULL_TREE;
!           DECL_ARTIFICIAL (decl) = 1;
!           DECL_INITIAL (decl) = decl;
! 
!           make_decl_rtl (decl, NULL_PTR, 1);
!           assemble_variable (decl, 1, 0, 0);
  	}
      }
  }