Commit 3a94c984 by Kazu Hirata Committed by Jeff Law

* expr.c: Fix formatting.

From-SVN: r35523
parent e50f5f3d
2000-08-06 Kazu Hirata <kazu@hxi.com>
* expr.c: Fix formatting.
2000-08-06 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> 2000-08-06 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* rs6000.c (rs6000_maybe_dead): Prototype. * rs6000.c (rs6000_maybe_dead): Prototype.
......
...@@ -19,7 +19,6 @@ along with GNU CC; see the file COPYING. If not, write to ...@@ -19,7 +19,6 @@ along with GNU CC; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330, the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */ Boston, MA 02111-1307, USA. */
#include "config.h" #include "config.h"
#include "system.h" #include "system.h"
#include "machmode.h" #include "machmode.h"
...@@ -68,7 +67,7 @@ Boston, MA 02111-1307, USA. */ ...@@ -68,7 +67,7 @@ Boston, MA 02111-1307, USA. */
#ifdef PUSH_ROUNDING #ifdef PUSH_ROUNDING
#if defined (STACK_GROWS_DOWNWARD) != defined (ARGS_GROW_DOWNWARD) #if defined (STACK_GROWS_DOWNWARD) != defined (ARGS_GROW_DOWNWARD)
#define PUSH_ARGS_REVERSED /* If it's last to first */ #define PUSH_ARGS_REVERSED /* If it's last to first. */
#endif #endif
#endif #endif
...@@ -196,7 +195,7 @@ static char direct_store[NUM_MACHINE_MODES]; ...@@ -196,7 +195,7 @@ static char direct_store[NUM_MACHINE_MODES];
#if defined (HAVE_movstrqi) || defined (HAVE_movstrhi) || defined (HAVE_movstrsi) || defined (HAVE_movstrdi) || defined (HAVE_movstrti) #if defined (HAVE_movstrqi) || defined (HAVE_movstrhi) || defined (HAVE_movstrsi) || defined (HAVE_movstrdi) || defined (HAVE_movstrti)
#define MOVE_RATIO 2 #define MOVE_RATIO 2
#else #else
/* If we are optimizing for space (-Os), cut down the default move ratio */ /* If we are optimizing for space (-Os), cut down the default move ratio. */
#define MOVE_RATIO (optimize_size ? 3 : 15) #define MOVE_RATIO (optimize_size ? 3 : 15)
#endif #endif
#endif #endif
...@@ -932,7 +931,7 @@ convert_move (to, from, unsignedp) ...@@ -932,7 +931,7 @@ convert_move (to, from, unsignedp)
return; return;
} }
/* Handle pointer conversion */ /* SPEE 900220 */ /* Handle pointer conversion. */ /* SPEE 900220. */
if (to_mode == PQImode) if (to_mode == PQImode)
{ {
if (from_mode != QImode) if (from_mode != QImode)
...@@ -1375,7 +1374,6 @@ convert_modes (mode, oldmode, x, unsignedp) ...@@ -1375,7 +1374,6 @@ convert_modes (mode, oldmode, x, unsignedp)
return temp; return temp;
} }
/* This macro is used to determine what the largest unit size that /* This macro is used to determine what the largest unit size that
move_by_pieces can use is. */ move_by_pieces can use is. */
...@@ -1834,7 +1832,6 @@ move_block_to_reg (regno, x, nregs, mode) ...@@ -1834,7 +1832,6 @@ move_block_to_reg (regno, x, nregs, mode)
The number of registers to be filled is NREGS. SIZE indicates the number The number of registers to be filled is NREGS. SIZE indicates the number
of bytes in the object X. */ of bytes in the object X. */
void void
move_block_from_reg (regno, x, nregs, size) move_block_from_reg (regno, x, nregs, size)
int regno; int regno;
...@@ -1936,7 +1933,7 @@ emit_group_load (dst, orig_src, ssize, align) ...@@ -1936,7 +1933,7 @@ emit_group_load (dst, orig_src, ssize, align)
else else
start = 1; start = 1;
tmps = (rtx *) alloca (sizeof(rtx) * XVECLEN (dst, 0)); tmps = (rtx *) alloca (sizeof (rtx) * XVECLEN (dst, 0));
/* If we won't be loading directly from memory, protect the real source /* If we won't be loading directly from memory, protect the real source
from strange tricks we might play. */ from strange tricks we might play. */
...@@ -2000,7 +1997,7 @@ emit_group_load (dst, orig_src, ssize, align) ...@@ -2000,7 +1997,7 @@ emit_group_load (dst, orig_src, ssize, align)
tmps[i], 0, OPTAB_WIDEN); tmps[i], 0, OPTAB_WIDEN);
} }
emit_queue(); emit_queue ();
/* Copy the extracted pieces into the proper (probable) hard regs. */ /* Copy the extracted pieces into the proper (probable) hard regs. */
for (i = start; i < XVECLEN (dst, 0); i++) for (i = start; i < XVECLEN (dst, 0); i++)
...@@ -2030,7 +2027,7 @@ emit_group_store (orig_dst, src, ssize, align) ...@@ -2030,7 +2027,7 @@ emit_group_store (orig_dst, src, ssize, align)
else else
start = 1; start = 1;
tmps = (rtx *) alloca (sizeof(rtx) * XVECLEN (src, 0)); tmps = (rtx *) alloca (sizeof (rtx) * XVECLEN (src, 0));
/* Copy the (probable) hard regs into pseudos. */ /* Copy the (probable) hard regs into pseudos. */
for (i = start; i < XVECLEN (src, 0); i++) for (i = start; i < XVECLEN (src, 0); i++)
...@@ -2039,7 +2036,7 @@ emit_group_store (orig_dst, src, ssize, align) ...@@ -2039,7 +2036,7 @@ emit_group_store (orig_dst, src, ssize, align)
tmps[i] = gen_reg_rtx (GET_MODE (reg)); tmps[i] = gen_reg_rtx (GET_MODE (reg));
emit_move_insn (tmps[i], reg); emit_move_insn (tmps[i], reg);
} }
emit_queue(); emit_queue ();
/* If we won't be storing directly into memory, protect the real destination /* If we won't be storing directly into memory, protect the real destination
from strange tricks we might play. */ from strange tricks we might play. */
...@@ -2111,7 +2108,7 @@ emit_group_store (orig_dst, src, ssize, align) ...@@ -2111,7 +2108,7 @@ emit_group_store (orig_dst, src, ssize, align)
mode, tmps[i], align, ssize); mode, tmps[i], align, ssize);
} }
emit_queue(); emit_queue ();
/* Copy from the pseudo into the (probable) hard reg. */ /* Copy from the pseudo into the (probable) hard reg. */
if (GET_CODE (dst) == REG) if (GET_CODE (dst) == REG)
...@@ -2202,7 +2199,7 @@ use_reg (call_fusage, reg) ...@@ -2202,7 +2199,7 @@ use_reg (call_fusage, reg)
{ {
if (GET_CODE (reg) != REG if (GET_CODE (reg) != REG
|| REGNO (reg) >= FIRST_PSEUDO_REGISTER) || REGNO (reg) >= FIRST_PSEUDO_REGISTER)
abort(); abort ();
*call_fusage *call_fusage
= gen_rtx_EXPR_LIST (VOIDmode, = gen_rtx_EXPR_LIST (VOIDmode,
...@@ -2276,7 +2273,8 @@ clear_by_pieces (to, len, align) ...@@ -2276,7 +2273,8 @@ clear_by_pieces (to, len, align)
data.explicit_inc_to = 0; data.explicit_inc_to = 0;
data.reverse data.reverse
= (GET_CODE (to_addr) == PRE_DEC || GET_CODE (to_addr) == POST_DEC); = (GET_CODE (to_addr) == PRE_DEC || GET_CODE (to_addr) == POST_DEC);
if (data.reverse) data.offset = len; if (data.reverse)
data.offset = len;
data.len = len; data.len = len;
/* If copying requires more than two move insns, /* If copying requires more than two move insns,
...@@ -2285,7 +2283,7 @@ clear_by_pieces (to, len, align) ...@@ -2285,7 +2283,7 @@ clear_by_pieces (to, len, align)
if (!data.autinc_to if (!data.autinc_to
&& move_by_pieces_ninsns (len, align) > 2) && move_by_pieces_ninsns (len, align) > 2)
{ {
/* Determine the main mode we'll be using */ /* Determine the main mode we'll be using. */
for (tmode = GET_CLASS_NARROWEST_MODE (MODE_INT); for (tmode = GET_CLASS_NARROWEST_MODE (MODE_INT);
tmode != VOIDmode; tmode = GET_MODE_WIDER_MODE (tmode)) tmode != VOIDmode; tmode = GET_MODE_WIDER_MODE (tmode))
if (GET_MODE_SIZE (tmode) < max_size) if (GET_MODE_SIZE (tmode) < max_size)
...@@ -2485,7 +2483,6 @@ clear_storage (object, size, align) ...@@ -2485,7 +2483,6 @@ clear_storage (object, size, align)
size = copy_to_mode_reg (TYPE_MODE (integer_type_node), size); size = copy_to_mode_reg (TYPE_MODE (integer_type_node), size);
#endif #endif
#ifdef TARGET_MEM_FUNCTIONS #ifdef TARGET_MEM_FUNCTIONS
/* It is incorrect to use the libcall calling conventions to call /* It is incorrect to use the libcall calling conventions to call
memset in this context. memset in this context.
...@@ -2675,7 +2672,7 @@ emit_move_insn_1 (x, y) ...@@ -2675,7 +2672,7 @@ emit_move_insn_1 (x, y)
memory and reload. FIXME, we should see about using extract and memory and reload. FIXME, we should see about using extract and
insert on integer registers, but complex short and complex char insert on integer registers, but complex short and complex char
variables should be rarely used. */ variables should be rarely used. */
if (GET_MODE_BITSIZE (mode) < 2*BITS_PER_WORD if (GET_MODE_BITSIZE (mode) < 2 * BITS_PER_WORD
&& (reload_in_progress | reload_completed) == 0) && (reload_in_progress | reload_completed) == 0)
{ {
int packed_dest_p = (REG_P (x) && REGNO (x) < FIRST_PSEUDO_REGISTER); int packed_dest_p = (REG_P (x) && REGNO (x) < FIRST_PSEUDO_REGISTER);
...@@ -2883,7 +2880,7 @@ push_block (size, extra, below) ...@@ -2883,7 +2880,7 @@ push_block (size, extra, below)
{ {
if (GET_CODE (size) == CONST_INT) if (GET_CODE (size) == CONST_INT)
temp = plus_constant (virtual_outgoing_args_rtx, temp = plus_constant (virtual_outgoing_args_rtx,
- INTVAL (size) - (below ? 0 : extra)); -INTVAL (size) - (below ? 0 : extra));
else if (extra != 0 && !below) else if (extra != 0 && !below)
temp = gen_rtx_PLUS (Pmode, virtual_outgoing_args_rtx, temp = gen_rtx_PLUS (Pmode, virtual_outgoing_args_rtx,
negate_rtx (Pmode, plus_constant (size, extra))); negate_rtx (Pmode, plus_constant (size, extra)));
...@@ -3049,17 +3046,17 @@ emit_push_insn (x, mode, type, size, align, partial, reg, extra, ...@@ -3049,17 +3046,17 @@ emit_push_insn (x, mode, type, size, align, partial, reg, extra,
rtx temp; rtx temp;
in_check_memory_usage = 1; in_check_memory_usage = 1;
temp = get_push_address (INTVAL(size) - used); temp = get_push_address (INTVAL (size) - used);
if (GET_CODE (x) == MEM && type && AGGREGATE_TYPE_P (type)) if (GET_CODE (x) == MEM && type && AGGREGATE_TYPE_P (type))
emit_library_call (chkr_copy_bitmap_libfunc, 1, VOIDmode, 3, emit_library_call (chkr_copy_bitmap_libfunc, 1, VOIDmode, 3,
temp, Pmode, temp, Pmode,
XEXP (xinner, 0), Pmode, XEXP (xinner, 0), Pmode,
GEN_INT (INTVAL(size) - used), GEN_INT (INTVAL (size) - used),
TYPE_MODE (sizetype)); TYPE_MODE (sizetype));
else else
emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3, emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3,
temp, Pmode, temp, Pmode,
GEN_INT (INTVAL(size) - used), GEN_INT (INTVAL (size) - used),
TYPE_MODE (sizetype), TYPE_MODE (sizetype),
GEN_INT (MEMORY_USE_RW), GEN_INT (MEMORY_USE_RW),
TYPE_MODE (integer_type_node)); TYPE_MODE (integer_type_node));
...@@ -4011,7 +4008,7 @@ store_expr (exp, target, want_value) ...@@ -4011,7 +4008,7 @@ store_expr (exp, target, want_value)
if (GET_CODE (copy_size_rtx) == CONST_INT) if (GET_CODE (copy_size_rtx) == CONST_INT)
{ {
addr = plus_constant (addr, TREE_STRING_LENGTH (exp)); addr = plus_constant (addr, TREE_STRING_LENGTH (exp));
size = plus_constant (size, - TREE_STRING_LENGTH (exp)); size = plus_constant (size, -TREE_STRING_LENGTH (exp));
align = MIN (align, (BITS_PER_UNIT align = MIN (align, (BITS_PER_UNIT
* (INTVAL (copy_size_rtx) * (INTVAL (copy_size_rtx)
& - INTVAL (copy_size_rtx)))); & - INTVAL (copy_size_rtx))));
...@@ -4611,7 +4608,7 @@ store_constructor (exp, target, align, cleared, size) ...@@ -4611,7 +4608,7 @@ store_constructor (exp, target, align, cleared, size)
} }
} }
/* Set constructor assignments */ /* Set constructor assignments. */
else if (TREE_CODE (type) == SET_TYPE) else if (TREE_CODE (type) == SET_TYPE)
{ {
tree elt = CONSTRUCTOR_ELTS (exp); tree elt = CONSTRUCTOR_ELTS (exp);
...@@ -4715,9 +4712,9 @@ store_constructor (exp, target, align, cleared, size) ...@@ -4715,9 +4712,9 @@ store_constructor (exp, target, align, cleared, size)
for (; elt != NULL_TREE; elt = TREE_CHAIN (elt)) for (; elt != NULL_TREE; elt = TREE_CHAIN (elt))
{ {
/* start of range of element or NULL */ /* Start of range of element or NULL. */
tree startbit = TREE_PURPOSE (elt); tree startbit = TREE_PURPOSE (elt);
/* end of range of element, or element value */ /* End of range of element, or element value. */
tree endbit = TREE_VALUE (elt); tree endbit = TREE_VALUE (elt);
#ifdef TARGET_MEM_FUNCTIONS #ifdef TARGET_MEM_FUNCTIONS
HOST_WIDE_INT startb, endb; HOST_WIDE_INT startb, endb;
...@@ -4727,7 +4724,7 @@ store_constructor (exp, target, align, cleared, size) ...@@ -4727,7 +4724,7 @@ store_constructor (exp, target, align, cleared, size)
bitlength_rtx = expand_expr (bitlength, bitlength_rtx = expand_expr (bitlength,
NULL_RTX, MEM, EXPAND_CONST_ADDRESS); NULL_RTX, MEM, EXPAND_CONST_ADDRESS);
/* handle non-range tuple element like [ expr ] */ /* Handle non-range tuple element like [ expr ]. */
if (startbit == NULL_TREE) if (startbit == NULL_TREE)
{ {
startbit = save_expr (endbit); startbit = save_expr (endbit);
...@@ -5694,7 +5691,6 @@ check_max_integer_computation_mode (exp) ...@@ -5694,7 +5691,6 @@ check_max_integer_computation_mode (exp)
} }
#endif #endif
/* Utility function used by expand_expr to see if TYPE, a RECORD_TYPE, /* Utility function used by expand_expr to see if TYPE, a RECORD_TYPE,
has any readonly fields. If any of the fields have types that has any readonly fields. If any of the fields have types that
contain readonly fields, return true as well. */ contain readonly fields, return true as well. */
...@@ -5843,7 +5839,7 @@ expand_expr (exp, target, tmode, modifier) ...@@ -5843,7 +5839,7 @@ expand_expr (exp, target, tmode, modifier)
expand_expr (TREE_OPERAND (exp, 2), const0_rtx, VOIDmode, ro_modifier); expand_expr (TREE_OPERAND (exp, 2), const0_rtx, VOIDmode, ro_modifier);
return const0_rtx; return const0_rtx;
} }
; ;
target = 0; target = 0;
} }
...@@ -6138,7 +6134,7 @@ expand_expr (exp, target, tmode, modifier) ...@@ -6138,7 +6134,7 @@ expand_expr (exp, target, tmode, modifier)
lineno = EXPR_WFL_LINENO (exp); lineno = EXPR_WFL_LINENO (exp);
if (EXPR_WFL_EMIT_LINE_NOTE (exp)) if (EXPR_WFL_EMIT_LINE_NOTE (exp))
emit_line_note (input_filename, lineno); emit_line_note (input_filename, lineno);
/* Possibly avoid switching back and force here */ /* Possibly avoid switching back and force here. */
to_return = expand_expr (EXPR_WFL_NODE (exp), target, tmode, modifier); to_return = expand_expr (EXPR_WFL_NODE (exp), target, tmode, modifier);
input_filename = saved_input_filename; input_filename = saved_input_filename;
lineno = saved_lineno; lineno = saved_lineno;
...@@ -6611,8 +6607,7 @@ expand_expr (exp, target, tmode, modifier) ...@@ -6611,8 +6607,7 @@ expand_expr (exp, target, tmode, modifier)
} }
} }
} }
/* Fall through. */
/* ... fall through ... */
case COMPONENT_REF: case COMPONENT_REF:
case BIT_FIELD_REF: case BIT_FIELD_REF:
...@@ -6767,7 +6762,6 @@ expand_expr (exp, target, tmode, modifier) ...@@ -6767,7 +6762,6 @@ expand_expr (exp, target, tmode, modifier)
bitpos = 0; bitpos = 0;
} }
op0 = change_address (op0, VOIDmode, op0 = change_address (op0, VOIDmode,
gen_rtx_PLUS (ptr_mode, XEXP (op0, 0), gen_rtx_PLUS (ptr_mode, XEXP (op0, 0),
force_reg (ptr_mode, force_reg (ptr_mode,
...@@ -7017,7 +7011,7 @@ expand_expr (exp, target, tmode, modifier) ...@@ -7017,7 +7011,7 @@ expand_expr (exp, target, tmode, modifier)
of the set. */ of the set. */
if (GET_CODE (lo_r) == CONST_INT) if (GET_CODE (lo_r) == CONST_INT)
rlow = GEN_INT (INTVAL (lo_r) rlow = GEN_INT (INTVAL (lo_r)
& ~ ((HOST_WIDE_INT) 1 << BITS_PER_UNIT)); & ~((HOST_WIDE_INT) 1 << BITS_PER_UNIT));
else else
rlow = expand_binop (index_mode, and_optab, lo_r, rlow = expand_binop (index_mode, and_optab, lo_r,
GEN_INT (~((HOST_WIDE_INT) 1 << BITS_PER_UNIT)), GEN_INT (~((HOST_WIDE_INT) 1 << BITS_PER_UNIT)),
...@@ -7036,7 +7030,7 @@ expand_expr (exp, target, tmode, modifier) ...@@ -7036,7 +7030,7 @@ expand_expr (exp, target, tmode, modifier)
setaddr, NULL_RTX, iunsignedp, setaddr, NULL_RTX, iunsignedp,
OPTAB_LIB_WIDEN)); OPTAB_LIB_WIDEN));
/* Extract the bit we want to examine */ /* Extract the bit we want to examine. */
bit = expand_shift (RSHIFT_EXPR, byte_mode, bit = expand_shift (RSHIFT_EXPR, byte_mode,
gen_rtx_MEM (byte_mode, addr), gen_rtx_MEM (byte_mode, addr),
make_tree (TREE_TYPE (index), rem), make_tree (TREE_TYPE (index), rem),
...@@ -8002,7 +7996,8 @@ expand_expr (exp, target, tmode, modifier) ...@@ -8002,7 +7996,8 @@ expand_expr (exp, target, tmode, modifier)
|| TREE_CODE (TREE_OPERAND (exp, 1)) == SAVE_EXPR) || TREE_CODE (TREE_OPERAND (exp, 1)) == SAVE_EXPR)
&& safe_from_p (temp, TREE_OPERAND (exp, 2), 1)) && safe_from_p (temp, TREE_OPERAND (exp, 2), 1))
{ {
if (GET_CODE (temp) == REG && REGNO (temp) < FIRST_PSEUDO_REGISTER) if (GET_CODE (temp) == REG
&& REGNO (temp) < FIRST_PSEUDO_REGISTER)
temp = gen_reg_rtx (mode); temp = gen_reg_rtx (mode);
store_expr (TREE_OPERAND (exp, 1), temp, 0); store_expr (TREE_OPERAND (exp, 1), temp, 0);
jumpif (TREE_OPERAND (exp, 0), op0); jumpif (TREE_OPERAND (exp, 0), op0);
...@@ -8020,7 +8015,8 @@ expand_expr (exp, target, tmode, modifier) ...@@ -8020,7 +8015,8 @@ expand_expr (exp, target, tmode, modifier)
|| TREE_CODE (TREE_OPERAND (exp, 2)) == SAVE_EXPR) || TREE_CODE (TREE_OPERAND (exp, 2)) == SAVE_EXPR)
&& safe_from_p (temp, TREE_OPERAND (exp, 1), 1)) && safe_from_p (temp, TREE_OPERAND (exp, 1), 1))
{ {
if (GET_CODE (temp) == REG && REGNO (temp) < FIRST_PSEUDO_REGISTER) if (GET_CODE (temp) == REG
&& REGNO (temp) < FIRST_PSEUDO_REGISTER)
temp = gen_reg_rtx (mode); temp = gen_reg_rtx (mode);
store_expr (TREE_OPERAND (exp, 2), temp, 0); store_expr (TREE_OPERAND (exp, 2), temp, 0);
jumpifnot (TREE_OPERAND (exp, 0), op0); jumpifnot (TREE_OPERAND (exp, 0), op0);
...@@ -8504,7 +8500,8 @@ expand_expr (exp, target, tmode, modifier) ...@@ -8504,7 +8500,8 @@ expand_expr (exp, target, tmode, modifier)
rtx subr = (rtx) TREE_OPERAND (exp, 0); rtx subr = (rtx) TREE_OPERAND (exp, 0);
rtx return_link = *(rtx *) &TREE_OPERAND (exp, 1); rtx return_link = *(rtx *) &TREE_OPERAND (exp, 1);
rtx return_address = gen_label_rtx (); rtx return_address = gen_label_rtx ();
emit_move_insn (return_link, gen_rtx_LABEL_REF (Pmode, return_address)); emit_move_insn (return_link,
gen_rtx_LABEL_REF (Pmode, return_address));
emit_jump (subr); emit_jump (subr);
emit_label (return_address); emit_label (return_address);
return const0_rtx; return const0_rtx;
...@@ -8653,8 +8650,7 @@ expand_expr_unaligned (exp, palign) ...@@ -8653,8 +8650,7 @@ expand_expr_unaligned (exp, palign)
} }
} }
} }
/* Fall through. */
/* ... fall through ... */
case COMPONENT_REF: case COMPONENT_REF:
case BIT_FIELD_REF: case BIT_FIELD_REF:
...@@ -8820,7 +8816,6 @@ expand_expr_unaligned (exp, palign) ...@@ -8820,7 +8816,6 @@ expand_expr_unaligned (exp, palign)
- bitsize), - bitsize),
op0, 1); op0, 1);
emit_move_insn (new, op0); emit_move_insn (new, op0);
op0 = copy_rtx (new); op0 = copy_rtx (new);
PUT_MODE (op0, BLKmode); PUT_MODE (op0, BLKmode);
...@@ -8986,7 +8981,7 @@ expand_increment (exp, post, ignore) ...@@ -8986,7 +8981,7 @@ expand_increment (exp, post, ignore)
if (this_optab == sub_optab if (this_optab == sub_optab
&& GET_CODE (op1) == CONST_INT) && GET_CODE (op1) == CONST_INT)
{ {
op1 = GEN_INT (- INTVAL (op1)); op1 = GEN_INT (-INTVAL (op1));
this_optab = add_optab; this_optab = add_optab;
} }
......
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