Commit 0b29309a by Zack Weinberg

config.gcc (m68hc11-*-*, [...]): Convert to new tm.h inclusion style.

	* config.gcc (m68hc11-*-*, m68hc12-*-*): Convert to new tm.h
	inclusion style.  xm-m68hc11.h no longer exists.
	* config/m68hc11/xm-m68hc11.h: Delete file.
	* config/m68hc11/m68hc12.h: Convert to new tm.h inclusion style.

	* config/m68hc11/m68hc11.h: Convert to new tm.h inclusion style.
	Don't define GCC_VERSION, N_, or PARAMS; don't include
	gansidecl.h or stdio.h.  Define inhibit_libc here.
	Make code conditioned on #if GCC_VERSION > 2095 unconditional.
	Delete code conditioned on #if GCC_VERSION == 2095.

	* config/m68hc11/m68hc11-protos.h, config/m68hc11/m68hc11.c:
	Make code conditioned on #if GCC_VERSION > 2095 unconditional.
	Delete code conditioned on #if GCC_VERSION == 2095.

From-SVN: r40878
parent ec0104b3
2001-03-27 Zack Weinberg <zackw@stanford.edu>
* config.gcc (m68hc11-*-*, m68hc12-*-*): Convert to new tm.h
inclusion style. xm-m68hc11.h no longer exists.
* config/m68hc11/xm-m68hc11.h: Delete file.
* config/m68hc11/m68hc12.h: Convert to new tm.h inclusion style.
* config/m68hc11/m68hc11.h: Convert to new tm.h inclusion style.
Don't define GCC_VERSION, N_, or PARAMS; don't include
gansidecl.h or stdio.h. Define inhibit_libc here.
Make code conditioned on #if GCC_VERSION > 2095 unconditional.
Delete code conditioned on #if GCC_VERSION == 2095.
* config/m68hc11/m68hc11-protos.h, config/m68hc11/m68hc11.c:
Make code conditioned on #if GCC_VERSION > 2095 unconditional.
Delete code conditioned on #if GCC_VERSION == 2095.
2001-03-27 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> 2001-03-27 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* system.h: Include symcat.h. * system.h: Include symcat.h.
...@@ -42,7 +59,7 @@ ...@@ -42,7 +59,7 @@
flag_no_inline is on. flag_no_inline is on.
* tree.h (DECL_FRAME_SIZE): Remove. * tree.h (DECL_FRAME_SIZE): Remove.
(tree_decl): Adjust accordingly. (tree_decl): Adjust accordingly.
2001-03-26 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> 2001-03-26 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* combine.c (try_combine): Use memcpy, not bcopy. * combine.c (try_combine): Use memcpy, not bcopy.
...@@ -95,7 +112,7 @@ Mon Mar 26 14:35:18 CEST 2001 Jan Hubicka <jh@suse.cz> ...@@ -95,7 +112,7 @@ Mon Mar 26 14:35:18 CEST 2001 Jan Hubicka <jh@suse.cz>
Set xm_defines to MACRO=value instead. Set xm_defines to MACRO=value instead.
* i370/xm-mvs.h: Delete. * i370/xm-mvs.h: Delete.
* ns32k/xm-pc532-min.h: Likewise. * ns32k/xm-pc532-min.h: Likewise.
Sun Mar 25 15:01:40 CEST 2001 Jan Hubicka <jh@suse.cz> Sun Mar 25 15:01:40 CEST 2001 Jan Hubicka <jh@suse.cz>
...@@ -202,7 +219,7 @@ Sat Mar 24 21:13:28 CET 2001 Jan Hubicka <jh@suse.cz> ...@@ -202,7 +219,7 @@ Sat Mar 24 21:13:28 CET 2001 Jan Hubicka <jh@suse.cz>
* varasm.c (make_decl_rtl): Add TREE_PUBLIC check to abort test. * varasm.c (make_decl_rtl): Add TREE_PUBLIC check to abort test.
(assemble_alias): Call make_decl_rtl. (assemble_alias): Call make_decl_rtl.
Fri Mar 23 16:59:08 2001 J"orn Rennecke <amylaar@redhat.com> Fri Mar 23 16:59:08 2001 J"orn Rennecke <amylaar@redhat.com>
* stor-layout.c (layout_type): Give OFFSET_TYPE a MODE_INT type. * stor-layout.c (layout_type): Give OFFSET_TYPE a MODE_INT type.
...@@ -343,7 +360,7 @@ Wed Mar 21 20:33:26 CET 2001 Jan Hubicka <jh@suse.cz> ...@@ -343,7 +360,7 @@ Wed Mar 21 20:33:26 CET 2001 Jan Hubicka <jh@suse.cz>
(ix86_expand_branch): DImode comparison is simple for x86_64. (ix86_expand_branch): DImode comparison is simple for x86_64.
(memory_address_length): Recognize memory addresses formed using (memory_address_length): Recognize memory addresses formed using
PRE/POST modify. PRE/POST modify.
(ix86_data_alignment, ix86_local_alignment): Align arrays to 16 bytes (ix86_data_alignment, ix86_local_alignment): Align arrays to 16 bytes
for x86_64. for x86_64.
* i386.h (TARGET_USE_SAHF): Disable for 64bit. * i386.h (TARGET_USE_SAHF): Disable for 64bit.
...@@ -411,7 +428,7 @@ Tue Mar 20 20:15:06 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> ...@@ -411,7 +428,7 @@ Tue Mar 20 20:15:06 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
i386_pe_mark_dllimport. i386_pe_mark_dllimport.
2001-03-20 David Billinghurst <David.Billinghurst@riotinto.com> 2001-03-20 David Billinghurst <David.Billinghurst@riotinto.com>
* config/i386/cygwin.h: Include <stdio.h> Declare and constify * config/i386/cygwin.h: Include <stdio.h> Declare and constify
functions i386_pe_*. functions i386_pe_*.
...@@ -487,7 +504,7 @@ Mon Mar 19 18:53:54 CET 2001 Jan Hubicka <jh@suse.cz> ...@@ -487,7 +504,7 @@ Mon Mar 19 18:53:54 CET 2001 Jan Hubicka <jh@suse.cz>
2001-03-16 Andrew Haley <aph@cambridge.redhat.com> 2001-03-16 Andrew Haley <aph@cambridge.redhat.com>
* config/ia64/libgcc-ia64.ver: Add __ia64_backtrace. * config/ia64/libgcc-ia64.ver: Add __ia64_backtrace.
2001-03-19 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at> 2001-03-19 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
......
...@@ -1595,17 +1595,15 @@ m32r-*-elf*) ...@@ -1595,17 +1595,15 @@ m32r-*-elf*)
;; ;;
# m68hc11 and m68hc12 share the same machine description. # m68hc11 and m68hc12 share the same machine description.
m68hc11-*-*|m6811-*-*) m68hc11-*-*|m6811-*-*)
tm_file="m68hc11/m68hc11.h" tm_file="elfos.h m68hc11/m68hc11.h"
xm_file="m68hc11/xm-m68hc11.h"
tm_p_file="m68hc11/m68hc11-protos.h" tm_p_file="m68hc11/m68hc11-protos.h"
md_file="m68hc11/m68hc11.md" md_file="m68hc11/m68hc11.md"
out_file="m68hc11/m68hc11.c" out_file="m68hc11/m68hc11.c"
tmake_file="m68hc11/t-m68hc11-gas" tmake_file="m68hc11/t-m68hc11-gas"
;; ;;
m68hc12-*-*|m6812-*-*) m68hc12-*-*|m6812-*-*)
tm_file="m68hc11/m68hc12.h" tm_file="m68hc11/m68hc12.h elfos.h m68hc11/m68hc11.h"
tm_p_file="m68hc11/m68hc11-protos.h" tm_p_file="m68hc11/m68hc11-protos.h"
xm_file="m68hc11/xm-m68hc11.h"
md_file="m68hc11/m68hc11.md" md_file="m68hc11/m68hc11.md"
out_file="m68hc11/m68hc11.c" out_file="m68hc11/m68hc11.c"
tmake_file="m68hc11/t-m68hc11-gas" tmake_file="m68hc11/t-m68hc11-gas"
......
...@@ -53,11 +53,8 @@ extern void m68hc11_encode_section_info PARAMS((tree)); ...@@ -53,11 +53,8 @@ extern void m68hc11_encode_section_info PARAMS((tree));
#endif #endif
#ifdef RTX_CODE #ifdef RTX_CODE
#if GCC_VERSION > 2095
extern rtx m68hc11_compare_op0; extern rtx m68hc11_compare_op0;
extern rtx m68hc11_compare_op1; extern rtx m68hc11_compare_op1;
#endif
extern rtx m68hc11_soft_tmp_reg; extern rtx m68hc11_soft_tmp_reg;
extern rtx iy_reg; extern rtx iy_reg;
extern rtx d_reg; extern rtx d_reg;
...@@ -165,10 +162,9 @@ extern void m68hc11_function_epilogue PARAMS((FILE*,int)); ...@@ -165,10 +162,9 @@ extern void m68hc11_function_epilogue PARAMS((FILE*,int));
#endif /* TREE_CODE */ #endif /* TREE_CODE */
#if GCC_VERSION > 2095
extern HOST_WIDE_INT m68hc11_min_offset; extern HOST_WIDE_INT m68hc11_min_offset;
extern HOST_WIDE_INT m68hc11_max_offset; extern HOST_WIDE_INT m68hc11_max_offset;
#endif
#endif /* HAVE_MACHINE_MODES */ #endif /* HAVE_MACHINE_MODES */
#endif /* RTX_CODE */ #endif /* RTX_CODE */
...@@ -37,9 +37,7 @@ Note: ...@@ -37,9 +37,7 @@ Note:
#include "system.h" #include "system.h"
#include "rtl.h" #include "rtl.h"
#include "tree.h" #include "tree.h"
#if GCC_VERSION > 2095
#include "tm_p.h" #include "tm_p.h"
#endif
#include "regs.h" #include "regs.h"
#include "hard-reg-set.h" #include "hard-reg-set.h"
#include "real.h" #include "real.h"
...@@ -52,16 +50,8 @@ Note: ...@@ -52,16 +50,8 @@ Note:
#include "expr.h" #include "expr.h"
#include "toplev.h" #include "toplev.h"
#include "basic-block.h" #include "basic-block.h"
#if GCC_VERSION > 2095
#include "function.h" #include "function.h"
#include "ggc.h" #include "ggc.h"
#else
#include "m68hc11-protos.h"
#endif
#if GCC_VERSION == 2095
extern char *version_string;
#endif
static void print_options PARAMS ((FILE *)); static void print_options PARAMS ((FILE *));
static void emit_move_after_reload PARAMS ((rtx, rtx, rtx)); static void emit_move_after_reload PARAMS ((rtx, rtx, rtx));
...@@ -140,7 +130,6 @@ static void m68hc11_add_gc_roots PARAMS ((void)); ...@@ -140,7 +130,6 @@ static void m68hc11_add_gc_roots PARAMS ((void));
static int nb_soft_regs; static int nb_soft_regs;
#if GCC_VERSION > 2095
/* Flag defined in c-decl.c /* Flag defined in c-decl.c
Nonzero means don't recognize the non-ANSI builtin functions. Nonzero means don't recognize the non-ANSI builtin functions.
...@@ -151,16 +140,13 @@ static int nb_soft_regs; ...@@ -151,16 +140,13 @@ static int nb_soft_regs;
conflict with newlib definition. Don't define as external to conflict with newlib definition. Don't define as external to
avoid a link problem for f77. */ avoid a link problem for f77. */
int flag_no_nonansi_builtin; int flag_no_nonansi_builtin;
#endif
int int
m68hc11_override_options () m68hc11_override_options ()
{ {
m68hc11_add_gc_roots (); m68hc11_add_gc_roots ();
#if GCC_VERSION > 2095
flag_no_nonansi_builtin = 1; flag_no_nonansi_builtin = 1;
#endif
memset (m68hc11_reg_valid_for_index, 0, memset (m68hc11_reg_valid_for_index, 0,
sizeof (m68hc11_reg_valid_for_index)); sizeof (m68hc11_reg_valid_for_index));
...@@ -1324,8 +1310,6 @@ m68hc11_function_arg (cum, mode, type, named) ...@@ -1324,8 +1310,6 @@ m68hc11_function_arg (cum, mode, type, named)
return NULL_RTX; return NULL_RTX;
} }
#if GCC_VERSION > 2095
/* The "standard" implementation of va_start: just assign `nextarg' to /* The "standard" implementation of va_start: just assign `nextarg' to
the variable. */ the variable. */
void void
...@@ -1393,7 +1377,6 @@ m68hc11_va_arg (valist, type) ...@@ -1393,7 +1377,6 @@ m68hc11_va_arg (valist, type)
return addr; return addr;
} }
#endif
/* If defined, a C expression which determines whether, and in which direction, /* If defined, a C expression which determines whether, and in which direction,
to pad out an argument with extra space. The value should be of type to pad out an argument with extra space. The value should be of type
...@@ -4588,49 +4571,6 @@ m68hc11_reassign_regs (first) ...@@ -4588,49 +4571,6 @@ m68hc11_reassign_regs (first)
} }
} }
#if GCC_VERSION == 2095
/* Split all insns in the function. If UPD_LIFE, update life info after. */
static int
m68hc11_split_all_insns (first)
rtx first;
{
rtx insn;
int split_done = 0;
for (insn = first; insn; insn = NEXT_INSN (insn))
{
rtx last;
if (INSN_DELETED_P (insn))
continue;
if (GET_RTX_CLASS (GET_CODE (insn)) != 'i')
continue;
last = try_split (PATTERN (insn), insn, 1);
/* When not optimizing, the old insn will be still left around
with only the 'deleted' bit set. Transform it into a note
to avoid confusion of subsequent processing. */
if (INSN_DELETED_P (insn))
{
PUT_CODE (insn, NOTE);
NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
NOTE_SOURCE_FILE (insn) = 0;
split_done = 1;
}
if (last != insn)
{
PUT_CODE (insn, NOTE);
NOTE_SOURCE_FILE (insn) = 0;
NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
split_done = 1;
}
}
return split_done;
}
#endif /* GCC_VERSION == 2095 */
void void
m68hc11_reorg (first) m68hc11_reorg (first)
...@@ -4641,20 +4581,14 @@ m68hc11_reorg (first) ...@@ -4641,20 +4581,14 @@ m68hc11_reorg (first)
z_replacement_completed = 0; z_replacement_completed = 0;
z_reg = gen_rtx (REG, HImode, HARD_Z_REGNUM); z_reg = gen_rtx (REG, HImode, HARD_Z_REGNUM);
#if GCC_VERSION > 2095
/* Some RTX are shared at this point. This breaks the Z register /* Some RTX are shared at this point. This breaks the Z register
replacement, unshare everything. */ replacement, unshare everything. */
unshare_all_rtl_again (first); unshare_all_rtl_again (first);
#endif
/* Force a split of all splitable insn. This is necessary for the /* Force a split of all splitable insn. This is necessary for the
Z register replacement mechanism because we end up with basic insns. */ Z register replacement mechanism because we end up with basic insns. */
#if GCC_VERSION > 2095
split_all_insns (0); split_all_insns (0);
split_done = 1; split_done = 1;
#else
split_done = m68hc11_split_all_insns (first);
#endif
z_replacement_completed = 1; z_replacement_completed = 1;
m68hc11_reassign_regs (first); m68hc11_reassign_regs (first);
...@@ -4668,14 +4602,8 @@ m68hc11_reorg (first) ...@@ -4668,14 +4602,8 @@ m68hc11_reorg (first)
description to use the best assembly directives. */ description to use the best assembly directives. */
if (optimize) if (optimize)
{ {
#if GCC_VERSION > 2095
find_basic_blocks (first, max_reg_num (), 0); find_basic_blocks (first, max_reg_num (), 0);
life_analysis (first, 0, PROP_REG_INFO | PROP_DEATH_NOTES); life_analysis (first, 0, PROP_REG_INFO | PROP_DEATH_NOTES);
#else
find_basic_blocks (first, max_reg_num (), 0, 1);
life_analysis (first, max_reg_num (), 0,
1 /* SCz: dead code elim fails. Must investigate. */ );
#endif
} }
z_replacement_completed = 2; z_replacement_completed = 2;
...@@ -4684,11 +4612,7 @@ m68hc11_reorg (first) ...@@ -4684,11 +4612,7 @@ m68hc11_reorg (first)
split after Z register replacement. This gives more opportunities split after Z register replacement. This gives more opportunities
for peephole (in particular for consecutives xgdx/xgdy). */ for peephole (in particular for consecutives xgdx/xgdy). */
if (optimize > 0) if (optimize > 0)
#if GCC_VERSION > 2095
split_all_insns (0); split_all_insns (0);
#else
m68hc11_split_all_insns (first);
#endif
/* Once insns are split after the z_replacement_completed == 2, /* Once insns are split after the z_replacement_completed == 2,
we must not re-run the life_analysis. The xgdx/xgdy patterns we must not re-run the life_analysis. The xgdx/xgdy patterns
...@@ -4996,9 +4920,6 @@ m68hc11_rtx_costs (x, code, outer_code) ...@@ -4996,9 +4920,6 @@ m68hc11_rtx_costs (x, code, outer_code)
/* print_options - called at the start of the code generation for a /* print_options - called at the start of the code generation for a
module. */ module. */
#if GCC_VERSION == 2095
extern char *main_input_filename;
#endif
extern char *asm_file_name; extern char *asm_file_name;
#include <time.h> #include <time.h>
...@@ -5052,7 +4973,6 @@ m68hc11_asm_file_start (out, main_file) ...@@ -5052,7 +4973,6 @@ m68hc11_asm_file_start (out, main_file)
static void static void
m68hc11_add_gc_roots () m68hc11_add_gc_roots ()
{ {
#if GCC_VERSION > 2095
ggc_add_rtx_root (&m68hc11_soft_tmp_reg, 1); ggc_add_rtx_root (&m68hc11_soft_tmp_reg, 1);
ggc_add_rtx_root (&ix_reg, 1); ggc_add_rtx_root (&ix_reg, 1);
ggc_add_rtx_root (&iy_reg, 1); ggc_add_rtx_root (&iy_reg, 1);
...@@ -5062,5 +4982,4 @@ m68hc11_add_gc_roots () ...@@ -5062,5 +4982,4 @@ m68hc11_add_gc_roots ()
ggc_add_rtx_root (&z_reg_qi, 1); ggc_add_rtx_root (&z_reg_qi, 1);
ggc_add_rtx_root (&stack_push_word, 1); ggc_add_rtx_root (&stack_push_word, 1);
ggc_add_rtx_root (&stack_pop_word, 1); ggc_add_rtx_root (&stack_pop_word, 1);
#endif
} }
...@@ -33,18 +33,6 @@ Note: ...@@ -33,18 +33,6 @@ Note:
*/ */
#undef GCC_VERSION
#if 1 /* def N_*/
# define GCC_VERSION 2096
#else
# define GCC_VERSION 2095
/* NLS support in 2.96 */
# define N_(X) X
#endif
#include "elfos.h"
/***************************************************************************** /*****************************************************************************
** **
** Controlling the Compilation Driver, `gcc' ** Controlling the Compilation Driver, `gcc'
...@@ -86,21 +74,8 @@ Note: ...@@ -86,21 +74,8 @@ Note:
/* Names to predefine in the preprocessor for this target machine. */ /* Names to predefine in the preprocessor for this target machine. */
#define CPP_PREDEFINES "-Dmc68hc1x" #define CPP_PREDEFINES "-Dmc68hc1x"
/* As an embedded target, we have no libc. */
#ifndef IN_LIBGCC2 #define inhibit_libc
# include <stdio.h>
#endif
#include "gansidecl.h"
#if GCC_VERSION == 2095
#ifndef PARAMS
#if defined(ANSI_PROTOTYPES) || defined(__cplusplus)
#define PARAMS(args) args
#else
#define PARAMS(args) ()
#endif
#endif
/* Forward type declaration for prototypes definitions. /* Forward type declaration for prototypes definitions.
rtx_ptr is equivalent to rtx. Can't use the same name. */ rtx_ptr is equivalent to rtx. Can't use the same name. */
...@@ -113,9 +88,7 @@ typedef union tree_node *tree_ptr; ...@@ -113,9 +88,7 @@ typedef union tree_node *tree_ptr;
/* We can't declare enum machine_mode forward nor include 'machmode.h' here. /* We can't declare enum machine_mode forward nor include 'machmode.h' here.
Prototypes defined here will use an int instead. It's better than no Prototypes defined here will use an int instead. It's better than no
prototype at all. */ prototype at all. */
typedef int enum_machine_mode; typedef int enum_machine_mode;
#endif
/***************************************************************************** /*****************************************************************************
** **
...@@ -1297,11 +1270,7 @@ extern enum reg_class m68hc11_index_reg_class; ...@@ -1297,11 +1270,7 @@ extern enum reg_class m68hc11_index_reg_class;
/* Internal macro, return 1 if REGNO is a valid base register. */ /* Internal macro, return 1 if REGNO is a valid base register. */
#if GCC_VERSION == 2095 #define REG_VALID_P(REGNO) (1) /* ? */
# define REG_VALID_P(REGNO) ((REGNO) >= 0)
#else
# define REG_VALID_P(REGNO) (1) /* ? */
#endif
extern unsigned char m68hc11_reg_valid_for_base[FIRST_PSEUDO_REGISTER]; extern unsigned char m68hc11_reg_valid_for_base[FIRST_PSEUDO_REGISTER];
#define REG_VALID_FOR_BASE_P(REGNO) \ #define REG_VALID_FOR_BASE_P(REGNO) \
...@@ -1882,14 +1851,3 @@ extern int debug_m6811; ...@@ -1882,14 +1851,3 @@ extern int debug_m6811;
extern int z_replacement_completed; extern int z_replacement_completed;
extern int current_function_interrupt; extern int current_function_interrupt;
extern int current_function_trap; extern int current_function_trap;
#if GCC_VERSION == 2095
extern rtx_ptr iy_reg;
extern rtx_ptr iy_reg;
extern rtx_ptr d_reg;
extern rtx_ptr m68hc11_soft_tmp_reg;
extern rtx_ptr m68hc11_compare_op0;
extern rtx_ptr m68hc11_compare_op1;
extern long m68hc11_min_offset;
extern long m68hc11_max_offset;
#endif
/* Definitions of target machine for GNU compiler, for m68hc12. /* Definitions of target machine for GNU compiler, for m68hc12.
Copyright (C) 1999, 2000 Free Software Foundation, Inc. Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
Contributed by Stephane Carrez (stcarrez@worldnet.fr). Contributed by Stephane Carrez (stcarrez@worldnet.fr).
This file is part of GNU CC. This file is part of GNU CC.
...@@ -38,6 +38,3 @@ Boston, MA 02111-1307, USA. */ ...@@ -38,6 +38,3 @@ Boston, MA 02111-1307, USA. */
#define TARGET_DEFAULT (MASK_M6812) #define TARGET_DEFAULT (MASK_M6812)
#define TARGET_M68HC12 #define TARGET_M68HC12
#include "m68hc11/m68hc11.h"
/* Configuration for GNU C-compiler for Motorola 68HC11 and 68HC12.
Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
Contributed by Stephane Carrez (stcarrez@worldnet.fr)
This file is part of GNU CC.
GNU CC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU CC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU CC; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#define inhibit_libc
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment