import GCC 4.1 branch from 20061021.

includes fixes for these 109 GCC PR's:

 4520 13685 13983 17519 19505 20256 22209 22313 23454 24367 25211
25468 25519 25636 25636 26435 26504 26570 26719 26764 26881 26969
26983 26991 26991 26993 27075 27184 27226 27287 27287 27291 27334
27363 27428 27489 27490 27537 27558 27565 27566 27616 27639 27681
27697 27721 27724 27768 27793 27793 27795 27827 27878 27889 27893
28029 28075 28136 28148 28150 28162 28170 28187 28207 28207 28218
28221 28238 28243 28247 28257 28259 28267 28283 28286 28299 28386
28402 28403 28418 28473 28490 28493 28621 28634 28636 28649 28651
28677 28683 28726 28814 28825 28862 28900 28924 28946 28952 28960
28980 29006 29091 29119 29132 29154 29198 29230 29290 29323
This commit is contained in:
mrg 2006-10-21 22:57:09 +00:00
parent b738ee7f82
commit 86e81e1a09
49 changed files with 976 additions and 257 deletions

View File

@ -4416,6 +4416,14 @@ arm_rtx_costs_1 (rtx x, enum rtx_code code, enum rtx_code outer)
/* Fall through */
case PLUS:
if (GET_CODE (XEXP (x, 0)) == MULT)
{
extra_cost = rtx_cost (XEXP (x, 0), code);
if (!REG_OR_SUBREG_REG (XEXP (x, 1)))
extra_cost += 4 * ARM_NUM_REGS (mode);
return extra_cost;
}
if (GET_MODE_CLASS (mode) == MODE_FLOAT)
return (2 + (REG_OR_SUBREG_REG (XEXP (x, 0)) ? 0 : 8)
+ ((REG_OR_SUBREG_REG (XEXP (x, 1))

View File

@ -9391,14 +9391,14 @@
ldm[0] = base_reg;
if (val1 !=0 && val2 != 0)
{
rtx ops[3];
if (val1 == 4 || val2 == 4)
/* Other val must be 8, since we know they are adjacent and neither
is zero. */
output_asm_insn (\"ldm%?ib\\t%0, {%1, %2}\", ldm);
else
else if (const_ok_for_arm (val1) || const_ok_for_arm (-val1))
{
rtx ops[3];
ldm[0] = ops[0] = operands[4];
ops[1] = base_reg;
ops[2] = GEN_INT (val1);
@ -9408,6 +9408,17 @@
else
output_asm_insn (\"ldm%?da\\t%0, {%1, %2}\", ldm);
}
else
{
/* Offset is out of range for a single add, so use two ldr. */
ops[0] = ldm[1];
ops[1] = base_reg;
ops[2] = GEN_INT (val1);
output_asm_insn (\"ldr%?\\t%0, [%1, %2]\", ops);
ops[0] = ldm[2];
ops[2] = GEN_INT (val2);
output_asm_insn (\"ldr%?\\t%0, [%1, %2]\", ops);
}
}
else if (val1 != 0)
{

View File

@ -224,7 +224,7 @@ __gnu_unwind_execute (_Unwind_Context * context, __gnu_unwind_state * uws)
{
/* Pop VFP registers with fldmx. */
op = next_unwind_byte (uws);
op = ((op & 0xf0) << 12) | (op & 0xf);
op = ((op & 0xf0) << 12) | ((op & 0xf) + 1);
if (_Unwind_VRS_Pop (context, _UVRSC_VFP, op, _UVRSD_VFPX)
!= _UVRSR_OK)
return _URC_FAILURE;
@ -253,7 +253,7 @@ __gnu_unwind_execute (_Unwind_Context * context, __gnu_unwind_state * uws)
{
/* Pop iWMMXt D registers. */
op = next_unwind_byte (uws);
op = ((op & 0xf0) << 12) | (op & 0xf);
op = ((op & 0xf0) << 12) | ((op & 0xf) + 1);
if (_Unwind_VRS_Pop (context, _UVRSC_WMMXD, op, _UVRSD_UINT64)
!= _UVRSR_OK)
return _URC_FAILURE;
@ -284,7 +284,7 @@ __gnu_unwind_execute (_Unwind_Context * context, __gnu_unwind_state * uws)
{
/* Pop FPA registers. */
op = next_unwind_byte (uws);
op = ((op & 0xf0) << 12) | (op & 0xf);
op = ((op & 0xf0) << 12) | ((op & 0xf) + 1);
if (_Unwind_VRS_Pop (context, _UVRSC_FPA, op, _UVRSD_FPAX)
!= _UVRSR_OK)
return _URC_FAILURE;
@ -294,7 +294,7 @@ __gnu_unwind_execute (_Unwind_Context * context, __gnu_unwind_state * uws)
{
/* Pop VFP registers with fldmd. */
op = next_unwind_byte (uws);
op = ((op & 0xf0) << 12) | (op & 0xf);
op = ((op & 0xf0) << 12) | ((op & 0xf) + 1);
if (_Unwind_VRS_Pop (context, _UVRSC_VFP, op, _UVRSD_DOUBLE)
!= _UVRSR_OK)
return _URC_FAILURE;

View File

@ -337,6 +337,8 @@ selfrel_offset31 (const _uw *p)
/* Sign extend to 32 bits. */
if (offset & (1 << 30))
offset |= 1u << 31;
else
offset &= ~(1u << 31);
return offset + (_uw) p;
}

View File

@ -1,6 +1,6 @@
/* Definitions of target machine for GNU compiler,
for ATMEL AVR at90s8515, ATmega103/103L, ATmega603/603L microcontrollers.
Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
Free Software Foundation, Inc.
Contributed by Denis Chertykov (denisc@overta.ru)
@ -298,6 +298,9 @@ enum reg_class {
#define FRAME_POINTER_REQUIRED frame_pointer_required_p()
/* Offset from the frame pointer register value to the top of the stack. */
#define FRAME_POINTER_CFA_OFFSET(FNDECL) 0
#define ELIMINABLE_REGS { \
{ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \
{FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM} \

View File

@ -1915,13 +1915,14 @@
""
{
emit_move_insn (EH_RETURN_HANDLER_RTX, operands[0]);
emit_insn (gen_eh_return_internal ());
emit_jump_insn (gen_eh_return_internal ());
emit_barrier ();
DONE;
})
(define_insn_and_split "eh_return_internal"
[(unspec_volatile [(reg:SI REG_P2)] UNSPEC_VOLATILE_EH_RETURN)]
[(set (pc)
(unspec_volatile [(reg:SI REG_P2)] UNSPEC_VOLATILE_EH_RETURN))]
""
"#"
"reload_completed"

View File

@ -427,14 +427,15 @@ Boston, MA 02110-1301, USA. */
#define ASM_OUTPUT_ASCII(FILE, STR, LENGTH) \
do \
{ \
register const unsigned char *_ascii_bytes = \
const unsigned char *_ascii_bytes = \
(const unsigned char *) (STR); \
register const unsigned char *limit = _ascii_bytes + (LENGTH); \
register unsigned bytes_in_chunk = 0; \
const unsigned char *limit = _ascii_bytes + (LENGTH); \
const unsigned char *last_null = NULL; \
unsigned bytes_in_chunk = 0; \
\
for (; _ascii_bytes < limit; _ascii_bytes++) \
{ \
register const unsigned char *p; \
const unsigned char *p; \
\
if (bytes_in_chunk >= 60) \
{ \
@ -442,8 +443,14 @@ Boston, MA 02110-1301, USA. */
bytes_in_chunk = 0; \
} \
\
for (p = _ascii_bytes; p < limit && *p != '\0'; p++) \
continue; \
if (_ascii_bytes > last_null) \
{ \
for (p = _ascii_bytes; p < limit && *p != '\0'; p++) \
continue; \
last_null = p; \
} \
else \
p = last_null; \
\
if (p < limit && (p - _ascii_bytes) <= (long)STRING_LIMIT) \
{ \

View File

@ -343,7 +343,7 @@
"athlon-direct,(athlon-fpsched+athlon-agu),(athlon-fstore+athlon-store)")
(define_insn_reservation "athlon_fist" 4
(and (eq_attr "cpu" "athlon,k8")
(eq_attr "type" "fistp"))
(eq_attr "type" "fistp,fisttp"))
"athlon-direct,(athlon-fpsched+athlon-agu),(athlon-fstore+athlon-store)")
(define_insn_reservation "athlon_fmov" 2
(and (eq_attr "cpu" "athlon,k8")

View File

@ -1502,12 +1502,10 @@ override_options (void)
}
/* Validate -mpreferred-stack-boundary= value, or provide default.
The default of 128 bits is for Pentium III's SSE __m128, but we
don't want additional code to keep the stack aligned when
optimizing for code size. */
ix86_preferred_stack_boundary = (optimize_size
? TARGET_64BIT ? 128 : 32
: 128);
The default of 128 bits is for Pentium III's SSE __m128, We can't
change it because of optimize_size. Otherwise, we can't mix object
files compiled with -Os and -On. */
ix86_preferred_stack_boundary = 128;
if (ix86_preferred_stack_boundary_string)
{
i = atoi (ix86_preferred_stack_boundary_string);
@ -6153,7 +6151,7 @@ legitimize_pic_address (rtx orig, rtx reg)
new = reg;
}
}
else if (GET_CODE (addr) == SYMBOL_REF)
else if (GET_CODE (addr) == SYMBOL_REF && SYMBOL_REF_TLS_MODEL (addr) == 0)
{
if (TARGET_64BIT)
{
@ -17313,7 +17311,7 @@ ix86_expand_vector_init_duplicate (bool mmx_ok, enum machine_mode mode,
{
case V2SImode:
case V2SFmode:
if (!mmx_ok && !TARGET_SSE)
if (!mmx_ok)
return false;
/* FALLTHRU */
@ -17396,7 +17394,7 @@ ix86_expand_vector_init_low_nonzero (bool mmx_ok, enum machine_mode mode,
{
case V2SFmode:
case V2SImode:
if (!mmx_ok && !TARGET_SSE)
if (!mmx_ok)
return false;
/* FALLTHRU */

View File

@ -10392,6 +10392,42 @@
(const_string "ishift")))
(set_attr "mode" "DI")])
(define_insn "*ashldi3_cconly_rex64"
[(set (reg FLAGS_REG)
(compare
(ashift:DI (match_operand:DI 1 "nonimmediate_operand" "0")
(match_operand:QI 2 "immediate_operand" "e"))
(const_int 0)))
(clobber (match_scratch:DI 0 "=r"))]
"TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode)
&& ix86_binary_operator_ok (ASHIFT, DImode, operands)"
{
switch (get_attr_type (insn))
{
case TYPE_ALU:
gcc_assert (operands[2] == const1_rtx);
return "add{q}\t{%0, %0|%0, %0}";
default:
if (REG_P (operands[2]))
return "sal{q}\t{%b2, %0|%0, %b2}";
else if (operands[2] == const1_rtx
&& (TARGET_SHIFT1 || optimize_size))
return "sal{q}\t%0";
else
return "sal{q}\t{%2, %0|%0, %2}";
}
}
[(set (attr "type")
(cond [(and (and (ne (symbol_ref "TARGET_DOUBLE_WITH_ADD")
(const_int 0))
(match_operand 0 "register_operand" ""))
(match_operand 2 "const1_operand" ""))
(const_string "alu")
]
(const_string "ishift")))
(set_attr "mode" "DI")])
(define_insn "*ashldi3_1"
[(set (match_operand:DI 0 "register_operand" "=&r,r")
(ashift:DI (match_operand:DI 1 "reg_or_pm1_operand" "n,0")
@ -10673,6 +10709,42 @@
(const_string "ishift")))
(set_attr "mode" "SI")])
(define_insn "*ashlsi3_cconly"
[(set (reg FLAGS_REG)
(compare
(ashift:SI (match_operand:SI 1 "nonimmediate_operand" "0")
(match_operand:QI 2 "const_1_to_31_operand" "I"))
(const_int 0)))
(clobber (match_scratch:SI 0 "=r"))]
"ix86_match_ccmode (insn, CCGOCmode)
&& ix86_binary_operator_ok (ASHIFT, SImode, operands)"
{
switch (get_attr_type (insn))
{
case TYPE_ALU:
gcc_assert (operands[2] == const1_rtx);
return "add{l}\t{%0, %0|%0, %0}";
default:
if (REG_P (operands[2]))
return "sal{l}\t{%b2, %0|%0, %b2}";
else if (operands[2] == const1_rtx
&& (TARGET_SHIFT1 || optimize_size))
return "sal{l}\t%0";
else
return "sal{l}\t{%2, %0|%0, %2}";
}
}
[(set (attr "type")
(cond [(and (and (ne (symbol_ref "TARGET_DOUBLE_WITH_ADD")
(const_int 0))
(match_operand 0 "register_operand" ""))
(match_operand 2 "const1_operand" ""))
(const_string "alu")
]
(const_string "ishift")))
(set_attr "mode" "SI")])
(define_insn "*ashlsi3_cmp_zext"
[(set (reg FLAGS_REG)
(compare
@ -10829,6 +10901,42 @@
(const_string "ishift")))
(set_attr "mode" "HI")])
(define_insn "*ashlhi3_cconly"
[(set (reg FLAGS_REG)
(compare
(ashift:HI (match_operand:HI 1 "nonimmediate_operand" "0")
(match_operand:QI 2 "const_1_to_31_operand" "I"))
(const_int 0)))
(clobber (match_scratch:HI 0 "=r"))]
"ix86_match_ccmode (insn, CCGOCmode)
&& ix86_binary_operator_ok (ASHIFT, HImode, operands)"
{
switch (get_attr_type (insn))
{
case TYPE_ALU:
gcc_assert (operands[2] == const1_rtx);
return "add{w}\t{%0, %0|%0, %0}";
default:
if (REG_P (operands[2]))
return "sal{w}\t{%b2, %0|%0, %b2}";
else if (operands[2] == const1_rtx
&& (TARGET_SHIFT1 || optimize_size))
return "sal{w}\t%0";
else
return "sal{w}\t{%2, %0|%0, %2}";
}
}
[(set (attr "type")
(cond [(and (and (ne (symbol_ref "TARGET_DOUBLE_WITH_ADD")
(const_int 0))
(match_operand 0 "register_operand" ""))
(match_operand 2 "const1_operand" ""))
(const_string "alu")
]
(const_string "ishift")))
(set_attr "mode" "HI")])
(define_expand "ashlqi3"
[(set (match_operand:QI 0 "nonimmediate_operand" "")
(ashift:QI (match_operand:QI 1 "nonimmediate_operand" "")
@ -10987,6 +11095,42 @@
(const_string "ishift")))
(set_attr "mode" "QI")])
(define_insn "*ashlqi3_cconly"
[(set (reg FLAGS_REG)
(compare
(ashift:QI (match_operand:QI 1 "nonimmediate_operand" "0")
(match_operand:QI 2 "const_1_to_31_operand" "I"))
(const_int 0)))
(clobber (match_scratch:QI 0 "=q"))]
"ix86_match_ccmode (insn, CCGOCmode)
&& ix86_binary_operator_ok (ASHIFT, QImode, operands)"
{
switch (get_attr_type (insn))
{
case TYPE_ALU:
gcc_assert (operands[2] == const1_rtx);
return "add{b}\t{%0, %0|%0, %0}";
default:
if (REG_P (operands[2]))
return "sal{b}\t{%b2, %0|%0, %b2}";
else if (operands[2] == const1_rtx
&& (TARGET_SHIFT1 || optimize_size))
return "sal{b}\t%0";
else
return "sal{b}\t{%2, %0|%0, %2}";
}
}
[(set (attr "type")
(cond [(and (and (ne (symbol_ref "TARGET_DOUBLE_WITH_ADD")
(const_int 0))
(match_operand 0 "register_operand" ""))
(match_operand 2 "const1_operand" ""))
(const_string "alu")
]
(const_string "ishift")))
(set_attr "mode" "QI")])
;; See comment above `ashldi3' about how this works.
(define_expand "ashrti3"
@ -11130,6 +11274,20 @@
(const_string "2")
(const_string "*")))])
(define_insn "*ashrdi3_one_bit_cconly_rex64"
[(set (reg FLAGS_REG)
(compare
(ashiftrt:DI (match_operand:DI 1 "nonimmediate_operand" "0")
(match_operand:QI 2 "const1_operand" ""))
(const_int 0)))
(clobber (match_scratch:DI 0 "=r"))]
"TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode)
&& (TARGET_SHIFT1 || optimize_size)
&& ix86_binary_operator_ok (ASHIFTRT, DImode, operands)"
"sar{q}\t%0"
[(set_attr "type" "ishift")
(set_attr "length" "2")])
;; This pattern can't accept a variable shift count, since shifts by
;; zero don't affect the flags. We assume that shifts by constant
;; zero are optimized away.
@ -11147,6 +11305,19 @@
[(set_attr "type" "ishift")
(set_attr "mode" "DI")])
(define_insn "*ashrdi3_cconly_rex64"
[(set (reg FLAGS_REG)
(compare
(ashiftrt:DI (match_operand:DI 1 "nonimmediate_operand" "0")
(match_operand:QI 2 "const_int_operand" "n"))
(const_int 0)))
(clobber (match_scratch:DI 0 "=r"))]
"TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode)
&& ix86_binary_operator_ok (ASHIFTRT, DImode, operands)"
"sar{q}\t{%2, %0|%0, %2}"
[(set_attr "type" "ishift")
(set_attr "mode" "DI")])
(define_insn "*ashrdi3_1"
[(set (match_operand:DI 0 "register_operand" "=r")
(ashiftrt:DI (match_operand:DI 1 "register_operand" "0")
@ -11335,6 +11506,20 @@
(const_string "2")
(const_string "*")))])
(define_insn "*ashrsi3_one_bit_cconly"
[(set (reg FLAGS_REG)
(compare
(ashiftrt:SI (match_operand:SI 1 "nonimmediate_operand" "0")
(match_operand:QI 2 "const1_operand" ""))
(const_int 0)))
(clobber (match_scratch:SI 0 "=r"))]
"ix86_match_ccmode (insn, CCGOCmode)
&& (TARGET_SHIFT1 || optimize_size)
&& ix86_binary_operator_ok (ASHIFTRT, SImode, operands)"
"sar{l}\t%0"
[(set_attr "type" "ishift")
(set_attr "length" "2")])
(define_insn "*ashrsi3_one_bit_cmp_zext"
[(set (reg FLAGS_REG)
(compare
@ -11367,6 +11552,19 @@
[(set_attr "type" "ishift")
(set_attr "mode" "SI")])
(define_insn "*ashrsi3_cconly"
[(set (reg FLAGS_REG)
(compare
(ashiftrt:SI (match_operand:SI 1 "nonimmediate_operand" "0")
(match_operand:QI 2 "const_1_to_31_operand" "I"))
(const_int 0)))
(clobber (match_scratch:SI 0 "=r"))]
"ix86_match_ccmode (insn, CCGOCmode)
&& ix86_binary_operator_ok (ASHIFTRT, SImode, operands)"
"sar{l}\t{%2, %0|%0, %2}"
[(set_attr "type" "ishift")
(set_attr "mode" "SI")])
(define_insn "*ashrsi3_cmp_zext"
[(set (reg FLAGS_REG)
(compare
@ -11436,6 +11634,20 @@
(const_string "2")
(const_string "*")))])
(define_insn "*ashrhi3_one_bit_cconly"
[(set (reg FLAGS_REG)
(compare
(ashiftrt:HI (match_operand:HI 1 "nonimmediate_operand" "0")
(match_operand:QI 2 "const1_operand" ""))
(const_int 0)))
(clobber (match_scratch:HI 0 "=r"))]
"ix86_match_ccmode (insn, CCGOCmode)
&& (TARGET_SHIFT1 || optimize_size)
&& ix86_binary_operator_ok (ASHIFTRT, HImode, operands)"
"sar{w}\t%0"
[(set_attr "type" "ishift")
(set_attr "length" "2")])
;; This pattern can't accept a variable shift count, since shifts by
;; zero don't affect the flags. We assume that shifts by constant
;; zero are optimized away.
@ -11453,6 +11665,19 @@
[(set_attr "type" "ishift")
(set_attr "mode" "HI")])
(define_insn "*ashrhi3_cconly"
[(set (reg FLAGS_REG)
(compare
(ashiftrt:HI (match_operand:HI 1 "nonimmediate_operand" "0")
(match_operand:QI 2 "const_1_to_31_operand" "I"))
(const_int 0)))
(clobber (match_scratch:HI 0 "=r"))]
"ix86_match_ccmode (insn, CCGOCmode)
&& ix86_binary_operator_ok (ASHIFTRT, HImode, operands)"
"sar{w}\t{%2, %0|%0, %2}"
[(set_attr "type" "ishift")
(set_attr "mode" "HI")])
(define_expand "ashrqi3"
[(set (match_operand:QI 0 "nonimmediate_operand" "")
(ashiftrt:QI (match_operand:QI 1 "nonimmediate_operand" "")
@ -11536,6 +11761,20 @@
(const_string "2")
(const_string "*")))])
(define_insn "*ashrqi3_one_bit_cconly"
[(set (reg FLAGS_REG)
(compare
(ashiftrt:QI (match_operand:QI 1 "nonimmediate_operand" "0")
(match_operand:QI 2 "const1_operand" "I"))
(const_int 0)))
(clobber (match_scratch:QI 0 "=q"))]
"ix86_match_ccmode (insn, CCGOCmode)
&& (TARGET_SHIFT1 || optimize_size)
&& ix86_binary_operator_ok (ASHIFTRT, QImode, operands)"
"sar{b}\t%0"
[(set_attr "type" "ishift")
(set_attr "length" "2")])
;; This pattern can't accept a variable shift count, since shifts by
;; zero don't affect the flags. We assume that shifts by constant
;; zero are optimized away.
@ -11552,6 +11791,20 @@
"sar{b}\t{%2, %0|%0, %2}"
[(set_attr "type" "ishift")
(set_attr "mode" "QI")])
(define_insn "*ashrqi3_cconly"
[(set (reg FLAGS_REG)
(compare
(ashiftrt:QI (match_operand:QI 1 "nonimmediate_operand" "0")
(match_operand:QI 2 "const_1_to_31_operand" "I"))
(const_int 0)))
(clobber (match_scratch:QI 0 "=q"))]
"ix86_match_ccmode (insn, CCGOCmode)
&& ix86_binary_operator_ok (ASHIFTRT, QImode, operands)"
"sar{b}\t{%2, %0|%0, %2}"
[(set_attr "type" "ishift")
(set_attr "mode" "QI")])
;; Logical shift instructions
@ -11665,6 +11918,20 @@
(const_string "2")
(const_string "*")))])
(define_insn "*lshrdi3_cconly_one_bit_rex64"
[(set (reg FLAGS_REG)
(compare
(lshiftrt:DI (match_operand:DI 1 "nonimmediate_operand" "0")
(match_operand:QI 2 "const1_operand" ""))
(const_int 0)))
(clobber (match_scratch:DI 0 "=r"))]
"TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode)
&& (TARGET_SHIFT1 || optimize_size)
&& ix86_binary_operator_ok (LSHIFTRT, HImode, operands)"
"shr{q}\t%0"
[(set_attr "type" "ishift")
(set_attr "length" "2")])
;; This pattern can't accept a variable shift count, since shifts by
;; zero don't affect the flags. We assume that shifts by constant
;; zero are optimized away.
@ -11682,6 +11949,19 @@
[(set_attr "type" "ishift")
(set_attr "mode" "DI")])
(define_insn "*lshrdi3_cconly_rex64"
[(set (reg FLAGS_REG)
(compare
(lshiftrt:DI (match_operand:DI 1 "nonimmediate_operand" "0")
(match_operand:QI 2 "const_int_operand" "e"))
(const_int 0)))
(clobber (match_scratch:DI 0 "=r"))]
"TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode)
&& ix86_binary_operator_ok (LSHIFTRT, HImode, operands)"
"shr{q}\t{%2, %0|%0, %2}"
[(set_attr "type" "ishift")
(set_attr "mode" "DI")])
(define_insn "*lshrdi3_1"
[(set (match_operand:DI 0 "register_operand" "=r")
(lshiftrt:DI (match_operand:DI 1 "register_operand" "0")
@ -11794,6 +12074,20 @@
(const_string "2")
(const_string "*")))])
(define_insn "*lshrsi3_one_bit_cconly"
[(set (reg FLAGS_REG)
(compare
(lshiftrt:SI (match_operand:SI 1 "nonimmediate_operand" "0")
(match_operand:QI 2 "const1_operand" ""))
(const_int 0)))
(clobber (match_scratch:SI 0 "=r"))]
"ix86_match_ccmode (insn, CCGOCmode)
&& (TARGET_SHIFT1 || optimize_size)
&& ix86_binary_operator_ok (LSHIFTRT, HImode, operands)"
"shr{l}\t%0"
[(set_attr "type" "ishift")
(set_attr "length" "2")])
(define_insn "*lshrsi3_cmp_one_bit_zext"
[(set (reg FLAGS_REG)
(compare
@ -11826,6 +12120,19 @@
[(set_attr "type" "ishift")
(set_attr "mode" "SI")])
(define_insn "*lshrsi3_cconly"
[(set (reg FLAGS_REG)
(compare
(lshiftrt:SI (match_operand:SI 1 "nonimmediate_operand" "0")
(match_operand:QI 2 "const_1_to_31_operand" "I"))
(const_int 0)))
(clobber (match_scratch:SI 0 "=r"))]
"ix86_match_ccmode (insn, CCGOCmode)
&& ix86_binary_operator_ok (LSHIFTRT, HImode, operands)"
"shr{l}\t{%2, %0|%0, %2}"
[(set_attr "type" "ishift")
(set_attr "mode" "SI")])
(define_insn "*lshrsi3_cmp_zext"
[(set (reg FLAGS_REG)
(compare
@ -11895,6 +12202,20 @@
(const_string "2")
(const_string "*")))])
(define_insn "*lshrhi3_one_bit_cconly"
[(set (reg FLAGS_REG)
(compare
(lshiftrt:HI (match_operand:HI 1 "nonimmediate_operand" "0")
(match_operand:QI 2 "const1_operand" ""))
(const_int 0)))
(clobber (match_scratch:HI 0 "=r"))]
"ix86_match_ccmode (insn, CCGOCmode)
&& (TARGET_SHIFT1 || optimize_size)
&& ix86_binary_operator_ok (LSHIFTRT, HImode, operands)"
"shr{w}\t%0"
[(set_attr "type" "ishift")
(set_attr "length" "2")])
;; This pattern can't accept a variable shift count, since shifts by
;; zero don't affect the flags. We assume that shifts by constant
;; zero are optimized away.
@ -11912,6 +12233,19 @@
[(set_attr "type" "ishift")
(set_attr "mode" "HI")])
(define_insn "*lshrhi3_cconly"
[(set (reg FLAGS_REG)
(compare
(lshiftrt:HI (match_operand:HI 1 "nonimmediate_operand" "0")
(match_operand:QI 2 "const_1_to_31_operand" "I"))
(const_int 0)))
(clobber (match_scratch:HI 0 "=r"))]
"ix86_match_ccmode (insn, CCGOCmode)
&& ix86_binary_operator_ok (LSHIFTRT, HImode, operands)"
"shr{w}\t{%2, %0|%0, %2}"
[(set_attr "type" "ishift")
(set_attr "mode" "HI")])
(define_expand "lshrqi3"
[(set (match_operand:QI 0 "nonimmediate_operand" "")
(lshiftrt:QI (match_operand:QI 1 "nonimmediate_operand" "")
@ -11994,6 +12328,20 @@
(const_string "2")
(const_string "*")))])
(define_insn "*lshrqi2_one_bit_cconly"
[(set (reg FLAGS_REG)
(compare
(lshiftrt:QI (match_operand:QI 1 "nonimmediate_operand" "0")
(match_operand:QI 2 "const1_operand" ""))
(const_int 0)))
(clobber (match_scratch:QI 0 "=q"))]
"ix86_match_ccmode (insn, CCGOCmode)
&& (TARGET_SHIFT1 || optimize_size)
&& ix86_binary_operator_ok (LSHIFTRT, QImode, operands)"
"shr{b}\t%0"
[(set_attr "type" "ishift")
(set_attr "length" "2")])
;; This pattern can't accept a variable shift count, since shifts by
;; zero don't affect the flags. We assume that shifts by constant
;; zero are optimized away.
@ -12010,6 +12358,19 @@
"shr{b}\t{%2, %0|%0, %2}"
[(set_attr "type" "ishift")
(set_attr "mode" "QI")])
(define_insn "*lshrqi2_cconly"
[(set (reg FLAGS_REG)
(compare
(lshiftrt:QI (match_operand:QI 1 "nonimmediate_operand" "0")
(match_operand:QI 2 "const_1_to_31_operand" "I"))
(const_int 0)))
(clobber (match_scratch:QI 0 "=q"))]
"ix86_match_ccmode (insn, CCGOCmode)
&& ix86_binary_operator_ok (LSHIFTRT, QImode, operands)"
"shr{b}\t{%2, %0|%0, %2}"
[(set_attr "type" "ishift")
(set_attr "mode" "QI")])
;; Rotate instructions
@ -18561,6 +18922,32 @@
[(set_attr "type" "sseadd")
(set_attr "mode" "DF")])
;; Make two stack loads independent:
;; fld aa fld aa
;; fld %st(0) -> fld bb
;; fmul bb fmul %st(1), %st
;;
;; Actually we only match the last two instructions for simplicity.
(define_peephole2
[(set (match_operand 0 "fp_register_operand" "")
(match_operand 1 "fp_register_operand" ""))
(set (match_dup 0)
(match_operator 2 "binary_fp_operator"
[(match_dup 0)
(match_operand 3 "memory_operand" "")]))]
"REGNO (operands[0]) != REGNO (operands[1])"
[(set (match_dup 0) (match_dup 3))
(set (match_dup 0) (match_dup 4))]
;; The % modifier is not operational anymore in peephole2's, so we have to
;; swap the operands manually in the case of addition and multiplication.
"if (COMMUTATIVE_ARITH_P (operands[2]))
operands[4] = gen_rtx_fmt_ee (GET_CODE (operands[2]), GET_MODE (operands[2]),
operands[0], operands[1]);
else
operands[4] = gen_rtx_fmt_ee (GET_CODE (operands[2]), GET_MODE (operands[2]),
operands[1], operands[0]);")
;; Conditional addition patterns
(define_expand "addqicc"
[(match_operand:QI 0 "register_operand" "")

View File

@ -442,6 +442,9 @@
if (GET_CODE (op) != SYMBOL_REF)
return 0;
if (SYMBOL_REF_TLS_MODEL (op) != 0)
return 0;
if (SYMBOL_REF_LOCAL_P (op))
return 1;

View File

@ -108,7 +108,7 @@
[(set (match_operand:IMODE 0 "memory_operand" "=m")
(unspec_volatile:IMODE
[(plus:IMODE (match_dup 0)
(match_operand:IMODE 1 "nonmemory_operand" "r<immconstraint>"))]
(match_operand:IMODE 1 "nonmemory_operand" "<modeconstraint><immconstraint>"))]
UNSPECV_LOCK))
(clobber (reg:CC FLAGS_REG))]
""
@ -118,7 +118,7 @@
[(set (match_operand:IMODE 0 "memory_operand" "=m")
(unspec_volatile:IMODE
[(minus:IMODE (match_dup 0)
(match_operand:IMODE 1 "nonmemory_operand" "r<immconstraint>"))]
(match_operand:IMODE 1 "nonmemory_operand" "<modeconstraint><immconstraint>"))]
UNSPECV_LOCK))
(clobber (reg:CC FLAGS_REG))]
""
@ -128,7 +128,7 @@
[(set (match_operand:IMODE 0 "memory_operand" "=m")
(unspec_volatile:IMODE
[(ior:IMODE (match_dup 0)
(match_operand:IMODE 1 "nonmemory_operand" "r<immconstraint>"))]
(match_operand:IMODE 1 "nonmemory_operand" "<modeconstraint><immconstraint>"))]
UNSPECV_LOCK))
(clobber (reg:CC FLAGS_REG))]
""
@ -138,7 +138,7 @@
[(set (match_operand:IMODE 0 "memory_operand" "=m")
(unspec_volatile:IMODE
[(and:IMODE (match_dup 0)
(match_operand:IMODE 1 "nonmemory_operand" "r<immconstraint>"))]
(match_operand:IMODE 1 "nonmemory_operand" "<modeconstraint><immconstraint>"))]
UNSPECV_LOCK))
(clobber (reg:CC FLAGS_REG))]
""
@ -148,7 +148,7 @@
[(set (match_operand:IMODE 0 "memory_operand" "=m")
(unspec_volatile:IMODE
[(xor:IMODE (match_dup 0)
(match_operand:IMODE 1 "nonmemory_operand" "r<immconstraint>"))]
(match_operand:IMODE 1 "nonmemory_operand" "<modeconstraint><immconstraint>"))]
UNSPECV_LOCK))
(clobber (reg:CC FLAGS_REG))]
""

View File

@ -779,7 +779,30 @@ ia64_legitimate_constant_p (rtx x)
case CONST:
case SYMBOL_REF:
return tls_symbolic_operand_type (x) == 0;
/* ??? Short term workaround for PR 28490. We must make the code here
match the code in ia64_expand_move and move_operand, even though they
are both technically wrong. */
if (tls_symbolic_operand_type (x) == 0)
{
HOST_WIDE_INT addend = 0;
rtx op = x;
if (GET_CODE (op) == CONST
&& GET_CODE (XEXP (op, 0)) == PLUS
&& GET_CODE (XEXP (XEXP (op, 0), 1)) == CONST_INT)
{
addend = INTVAL (XEXP (XEXP (op, 0), 1));
op = XEXP (XEXP (op, 0), 0);
}
if (any_offset_symbol_operand (op, GET_MODE (op))
|| function_operand (op, GET_MODE (op)))
return true;
if (aligned_offset_symbol_operand (op, GET_MODE (op)))
return (addend & 0x3fff) == 0;
return false;
}
return false;
case CONST_VECTOR:
{

View File

@ -165,6 +165,7 @@ extern void mips_va_start (tree, rtx);
extern bool mips_expand_unaligned_load (rtx, rtx, unsigned int, int);
extern bool mips_expand_unaligned_store (rtx, rtx, unsigned int, int);
extern bool mips_mem_fits_mode_p (enum machine_mode mode, rtx x);
extern void override_options (void);
extern void mips_conditional_register_usage (void);
extern void mips_order_regs_for_local_alloc (void);

View File

@ -2941,7 +2941,7 @@
(unspec:GPR [(match_operand:BLK 1 "memory_operand" "m")
(match_operand:QI 2 "memory_operand" "m")]
UNSPEC_LOAD_LEFT))]
"!TARGET_MIPS16"
"!TARGET_MIPS16 && mips_mem_fits_mode_p (<MODE>mode, operands[1])"
"<load>l\t%0,%2"
[(set_attr "type" "load")
(set_attr "mode" "<MODE>")])
@ -2952,7 +2952,7 @@
(match_operand:QI 2 "memory_operand" "m")
(match_operand:GPR 3 "register_operand" "0")]
UNSPEC_LOAD_RIGHT))]
"!TARGET_MIPS16"
"!TARGET_MIPS16 && mips_mem_fits_mode_p (<MODE>mode, operands[1])"
"<load>r\t%0,%2"
[(set_attr "type" "load")
(set_attr "mode" "<MODE>")])
@ -2962,7 +2962,7 @@
(unspec:BLK [(match_operand:GPR 1 "reg_or_0_operand" "dJ")
(match_operand:QI 2 "memory_operand" "m")]
UNSPEC_STORE_LEFT))]
"!TARGET_MIPS16"
"!TARGET_MIPS16 && mips_mem_fits_mode_p (<MODE>mode, operands[0])"
"<store>l\t%z1,%2"
[(set_attr "type" "store")
(set_attr "mode" "<MODE>")])
@ -2973,7 +2973,7 @@
(match_operand:QI 2 "memory_operand" "m")
(match_dup 0)]
UNSPEC_STORE_RIGHT))]
"!TARGET_MIPS16"
"!TARGET_MIPS16 && mips_mem_fits_mode_p (<MODE>mode, operands[0])"
"<store>r\t%z1,%2"
[(set_attr "type" "store")
(set_attr "mode" "<MODE>")])

View File

@ -6,8 +6,6 @@ MULTILIB_OSDIRNAMES=../lib32 ../lib ../lib64
LIBGCC = stmp-multilib
INSTALL_LIBGCC = install-multilib
LIB2FUNCS_EXTRA = $(srcdir)/config/fixtfdi.c $(srcdir)/config/fixunstfdi.c $(srcdir)/config/floatditf.c $(srcdir)/config/floatunditf.c
TPBIT = tp-bit.c
tp-bit.c: $(srcdir)/config/fp-bit.c

View File

@ -4,8 +4,6 @@ MULTILIB_OSDIRNAMES = ../lib32 ../lib ../lib64
EXTRA_MULTILIB_PARTS=crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o
LIB2FUNCS_EXTRA = $(srcdir)/config/fixtfdi.c $(srcdir)/config/fixunstfdi.c $(srcdir)/config/floatditf.c $(srcdir)/config/floatunditf.c
TPBIT = tp-bit.c
tp-bit.c: $(srcdir)/config/fp-bit.c

View File

@ -19,3 +19,5 @@ fp-bit.c: $(srcdir)/config/fp-bit.c
echo '#endif' >> fp-bit.c
echo '#define QUIET_NAN_NEGATED' >> fp-bit.c
cat $(srcdir)/config/fp-bit.c >> fp-bit.c
LIB2_SIDITI_CONV_FUNCS=yes

View File

@ -33,7 +33,8 @@ Boston, MA 02110-1301, USA. */
%{!shared:%{pg:-L/lib/pa20_64/libp -L/usr/lib/pa20_64/libp %{!static:\
%nWarning: consider linking with `-static' as system libraries with\n\
%n profiling support are only provided in archive format}}}\
%{mhp-ld:+Accept TypeMismatch -z} -E %{mlinker-opt:-O} %{!shared:-u main}\
%{mhp-ld:+Accept TypeMismatch -z} -E %{mlinker-opt:-O}\
%{!shared:-u main %{!nostdlib:%{!nodefaultlibs:-u __cxa_finalize}}}\
%{static:-a archive} %{shared:%{mhp-ld:-b}%{!mhp-ld:-shared}}"
#else
#define LINK_SPEC \
@ -43,7 +44,8 @@ Boston, MA 02110-1301, USA. */
%{!shared:%{pg:-L/lib/pa20_64/libp -L/usr/lib/pa20_64/libp %{!static:\
%nWarning: consider linking with `-static' as system libraries with\n\
%n profiling support are only provided in archive format}}}\
%{!mgnu-ld:+Accept TypeMismatch -z} -E %{mlinker-opt:-O} %{!shared:-u main}\
%{!mgnu-ld:+Accept TypeMismatch -z} -E %{mlinker-opt:-O}\
%{!shared:-u main %{!nostdlib:%{!nodefaultlibs:-u __cxa_finalize}}}\
%{static:-a archive} %{shared:%{mgnu-ld:-shared}%{!mgnu-ld:-b}}"
#endif

View File

@ -68,6 +68,7 @@ do { \
%{mcpu=power4: -m620} \
%{mcpu=power5: -m620} \
%{mcpu=power5+: -m620} \
%{mcpu=power6: -m620} \
%{mcpu=powerpc: -mppc} \
%{mcpu=rs64a: -mppc} \
%{mcpu=603: -m603} \

View File

@ -74,6 +74,7 @@
%{mcpu=power4: -mpower4} \
%{mcpu=power5: -mpower4} \
%{mcpu=power5+: -mpower4} \
%{mcpu=power6: -mpower4 -maltivec} \
%{mcpu=powerpc: -mppc} \
%{mcpu=rios: -mpwr} \
%{mcpu=rios1: -mpwr} \
@ -502,7 +503,8 @@ extern enum rs6000_nop_insertion rs6000_sched_insert_nops;
#define LOCAL_ALIGNMENT(TYPE, ALIGN) \
((TARGET_ALTIVEC && TREE_CODE (TYPE) == VECTOR_TYPE) ? 128 : \
(TARGET_E500_DOUBLE && TYPE_MODE (TYPE) == DFmode) ? 64 : \
(TARGET_SPE && TREE_CODE (TYPE) == VECTOR_TYPE) ? 64 : ALIGN)
(TARGET_SPE && TREE_CODE (TYPE) == VECTOR_TYPE \
&& SPE_VECTOR_MODE (TYPE_MODE (TYPE))) ? 64 : ALIGN)
/* Alignment of field after `int : 0' in a structure. */
#define EMPTY_FIELD_BOUNDARY 32

View File

@ -2200,22 +2200,41 @@
(subreg:DF (match_operand:DI 1 "input_operand" "r,m") 0))]
"TARGET_E500_DOUBLE"
"@
evmergelo %0,%H1,%L1
evmergelo %0,%1,%L1
evldd%X1 %0,%y1")
(define_insn "*frob_di_df"
[(set (match_operand:DI 0 "nonimmediate_operand" "=&r")
(subreg:DI (match_operand:DF 1 "input_operand" "r") 0))]
"TARGET_E500_DOUBLE" /*one of these can be an mr */
"evmergehi %H0,%1,%1\;evmergelo %L0,%1,%1"
"TARGET_E500_DOUBLE"
"evmergehi %0,%1,%1\;mr %L0,%1"
[(set_attr "length" "8")])
(define_insn "*frob_di_df_2"
[(set (subreg:DF (match_operand:DI 0 "register_operand" "=&r") 0)
(match_operand:DF 1 "register_operand" "r"))]
[(set (subreg:DF (match_operand:DI 0 "register_operand" "=&r,r") 0)
(match_operand:DF 1 "input_operand" "r,m"))]
"TARGET_E500_DOUBLE"
"evmergehi %H0,%1,%1\;evmergelo %L0,%1,%1"
[(set_attr "length" "8")])
"*
{
switch (which_alternative)
{
default:
gcc_unreachable ();
case 0:
return \"evmergehi %0,%1,%1\;mr %L0,%1\";
case 1:
/* If the low-address word is used in the address, we must load
it last. Otherwise, load it first. Note that we cannot have
auto-increment in that case since the address register is
known to be dead. */
if (refers_to_regno_p (REGNO (operands[0]), REGNO (operands[0]) + 1,
operands[1], 0))
return \"{l|lwz} %L0,%L1\;{l|lwz} %0,%1\";
else
return \"{l%U1%X1|lwz%U1%X1} %0,%1\;{l|lwz} %L0,%L1\";
}
}"
[(set_attr "length" "8,8")])
(define_insn "*mov_sidf_e500_subreg0"
[(set (subreg:SI (match_operand:DF 0 "register_operand" "+r") 0)

View File

@ -2823,6 +2823,8 @@ legitimize_pic_address (rtx orig, rtx reg)
rtx new = orig;
rtx base;
gcc_assert (!TLS_SYMBOLIC_CONST (addr));
if (GET_CODE (addr) == LABEL_REF
|| (GET_CODE (addr) == SYMBOL_REF && SYMBOL_REF_LOCAL_P (addr)))
{
@ -2975,6 +2977,10 @@ legitimize_pic_address (rtx orig, rtx reg)
if (GET_CODE (addr) == PLUS)
{
rtx op0 = XEXP (addr, 0), op1 = XEXP (addr, 1);
gcc_assert (!TLS_SYMBOLIC_CONST (op0));
gcc_assert (!TLS_SYMBOLIC_CONST (op1));
/* Check first to see if this is a constant offset
from a local symbol reference. */
if ((GET_CODE (op0) == LABEL_REF
@ -3347,6 +3353,12 @@ legitimize_address (rtx x, rtx oldx ATTRIBUTE_UNUSED,
if (legitimate_address_p (mode, x, FALSE))
return x;
}
else if (GET_CODE (x) == PLUS
&& (TLS_SYMBOLIC_CONST (XEXP (x, 0))
|| TLS_SYMBOLIC_CONST (XEXP (x, 1))))
{
return x;
}
else if (flag_pic)
{
if (SYMBOLIC_CONST (x)

View File

@ -946,7 +946,11 @@
""
{
/* Handle symbolic constants. */
if (TARGET_64BIT && SYMBOLIC_CONST (operands[1]))
if (TARGET_64BIT
&& (SYMBOLIC_CONST (operands[1])
|| (GET_CODE (operands[1]) == PLUS
&& XEXP (operands[1], 0) == pic_offset_table_rtx
&& SYMBOLIC_CONST (XEXP (operands[1], 1)))))
emit_symbolic_move (operands);
})
@ -1197,7 +1201,11 @@
""
{
/* Handle symbolic constants. */
if (!TARGET_64BIT && SYMBOLIC_CONST (operands[1]))
if (!TARGET_64BIT
&& (SYMBOLIC_CONST (operands[1])
|| (GET_CODE (operands[1]) == PLUS
&& XEXP (operands[1], 0) == pic_offset_table_rtx
&& SYMBOLIC_CONST (XEXP(operands[1], 1)))))
emit_symbolic_move (operands);
})

View File

@ -1,3 +1,7 @@
2006-09-03 Joseph S. Myers <joseph@codesourcery.com>
* vi.po: Update.
2006-06-24 Joseph S. Myers <joseph@codesourcery.com>
* sv.po: Update.

View File

@ -1,25 +1,24 @@
# Vietnamese translation for cpplib.
# Copyright © 2005 Free Software Foundation, Inc.
# This file is distributed under the same license as the cpplib-4.0.0 package.
# Clytie Siddall <clytie@riverland.net.au>, 2005.
# Vietnamese translation for CPPlib.
# Copyright © 2006 Free Software Foundation, Inc.
# Clytie Siddall <clytie@riverland.net.au>, 2005-2006.
msgid ""
msgstr ""
"Project-Id-Version: cpplib 4.1.0\n"
"Project-Id-Version: cpplib 4.1.1\n"
"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
"POT-Creation-Date: 2006-05-24 16:28-0700\n"
"PO-Revision-Date: 2006-03-09 20:15+1030\n"
"PO-Revision-Date: 2006-06-26 21:37+0930\n"
"Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
"Language-Team: Vietnamese <gnomevi-list@lists.sourceforge.net>\n"
"Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0\n"
"X-Generator: BBEdit 8.2.5\n"
"X-Generator: LocFactoryEditor 1.6a11\n"
#: charset.c:654
#, c-format
msgid "conversion from %s to %s not supported by iconv"
msgstr "iconv không hỗ trợ việc huyển đổi từ « %s » sang « %s »"
msgstr "iconv không hỗ trợ khả năng chuyển đổi từ %s sang %s"
#: charset.c:657
msgid "iconv_open"
@ -28,12 +27,12 @@ msgstr "iconv_open (mở)"
#: charset.c:665
#, c-format
msgid "no iconv implementation, cannot convert from %s to %s"
msgstr "chưa thi hành iconv nên không chuyển đổi được từ « %s » sang « %s »"
msgstr "chưa thi hành iconv nên không thể chuyển đổi từ %s sang %s"
#: charset.c:742
#, c-format
msgid "character 0x%lx is not in the basic source character set\n"
msgstr "ký tự « 0x%lx » không phải trong bộ ký tự nguồn cơ bản\n"
msgstr "ký tự 0x%lx không phải nằm trong bộ ký tự nguồn cơ bản\n"
#: charset.c:759 charset.c:1352
msgid "converting to execution character set"
@ -42,16 +41,16 @@ msgstr "đang chuyển đổi sang bộ ký tự thi hành"
#: charset.c:765
#, c-format
msgid "character 0x%lx is not unibyte in execution character set"
msgstr "ký tự « 0x%lx » không có dạng đơn byte trong bộ ký tự thi hành"
msgstr "ký tự 0x%lx không có dạng byte đơn trong bộ ký tự thi hành"
#: charset.c:889
#, c-format
msgid "Character %x might not be NFKC"
msgstr "Ký tự « %x » có lẽ không phải là NKFC"
msgstr "Ký tự %x có lẽ không phải có kiểu NFKC"
#: charset.c:949
msgid "universal character names are only valid in C++ and C99"
msgstr "tên ký tự chung chỉ là hợp lệ trong ngôn ngữ C++ và C99"
msgstr "tên ký tự chung là hợp lệ chỉ trong ngôn ngữ C++ và C99"
#: charset.c:952
#, c-format
@ -60,31 +59,31 @@ msgstr "« \\%c » có nghĩa khác trong ngôn ngữ C truyền thống"
#: charset.c:961
msgid "In _cpp_valid_ucn but not a UCN"
msgstr "Trong « _cpp_valid_ucn » nhưng mà không phải lả một"
msgstr "Trong « _cpp_valid_ucn » nhưng mà không phải lả một UCN"
#: charset.c:986
#, c-format
msgid "incomplete universal character name %.*s"
msgstr "tên ký tự chung « %.*s » chưa hoàn thành"
msgstr "tên ký tự chung %.*s chưa hoàn thành"
#: charset.c:998
#, c-format
msgid "%.*s is not a valid universal character"
msgstr "« %.*s » không phải là ký tự chung hợp lệ"
msgstr "%.*s không phải là ký tự chung hợp lệ"
#: charset.c:1008 lex.c:472
msgid "'$' in identifier or number"
msgstr "gặp « $ » trong dấu hiệu nhận hiện hay số"
msgstr "gặp « $ » trong bộ nhận hiện hay con số"
#: charset.c:1018
#, c-format
msgid "universal character %.*s is not valid in an identifier"
msgstr "ký tự chung « %.*s » không phải là hợp lệ trong dấu hiệu nhận diện"
msgstr "ký tự chung %.*s không phải là hợp lệ trong bộ nhận diện"
#: charset.c:1022
#, c-format
msgid "universal character %.*s is not valid at the start of an identifier"
msgstr "ký tự chung « %.*s » không phải hợp lệ tại đầu của dấu hiệu nhận diện"
msgstr "ký tự chung %.*s không phải hợp lệ tại đầu của bộ nhận diện"
#: charset.c:1056 charset.c:1571
msgid "converting UCN to source character set"
@ -100,11 +99,11 @@ msgstr "« \\x » có nghĩa khác trong ngôn ngữ C truyền thống"
#: charset.c:1149
msgid "\\x used with no following hex digits"
msgstr "« \\x » được sử dụng còn không có số hệ thâp lục phân theo sau"
msgstr "\\x được dùng còn không có chữ số thâp lục theo sau"
#: charset.c:1156
msgid "hex escape sequence out of range"
msgstr "dãy thoát hệ thập lục phân ở ngoài phạm vi"
msgstr "dãy thoát thập lục ở ngoài phạm vi"
#: charset.c:1195
msgid "octal escape sequence out of range"
@ -117,7 +116,7 @@ msgstr "« \\a » có nghĩa khác trong ngôn ngữ C truyền thống"
#: charset.c:1270
#, c-format
msgid "non-ISO-standard escape sequence, '\\%c'"
msgstr "dãy thoát không phải ISO chuẩn: « \\%c »"
msgstr "dãy thoát khác ISO chuẩn: « \\%c »"
#: charset.c:1278
#, c-format
@ -135,7 +134,7 @@ msgstr "đang chuyển đổi dãy thoát sang bộ ký tự thi hành"
#: charset.c:1415 charset.c:1478
msgid "character constant too long for its type"
msgstr "hằng ký tự quá dài cho loại nó"
msgstr "hằng ký tự quá dài cho kiểu nó"
#: charset.c:1418
msgid "multi-character character constant"
@ -148,35 +147,35 @@ msgstr "hằng ký tự trống"
#: charset.c:1612
#, c-format
msgid "failure to convert %s to %s"
msgstr "việc chuyển đổi « %s » sang « %s » bị lỗi"
msgstr "lỗi chuyển đổi %s sang %s"
#: directives.c:220 directives.c:246
#, c-format
msgid "extra tokens at end of #%s directive"
msgstr "gặp hiệu bài thêm tại cuối cùng chỉ thị « #%s »"
msgstr "gặp hiệu bài thêm tại kết thúc của chỉ thị #%s"
#: directives.c:347
#, c-format
msgid "#%s is a GCC extension"
msgstr "« #%s » là phần mở rộng loại GCC"
msgstr "#%s là phần mở rộng kiểu GCC"
#: directives.c:359
msgid "suggest not using #elif in traditional C"
msgstr "khuyên bạn không sử dụng « #elif » trong ngôn ngữ C truyền thống"
msgstr "khuyên bạn không dùng #elif trong ngôn ngữ C truyền thống"
#: directives.c:362
#, c-format
msgid "traditional C ignores #%s with the # indented"
msgstr "ngôn ngữ C truyền thống bỏ qua « #%s » với « # » được thụt lề"
msgstr "ngôn ngữ C truyền thống bỏ qua #%s với # được thụt lề"
#: directives.c:366
#, c-format
msgid "suggest hiding #%s from traditional C with an indented #"
msgstr "khuyên bạn ẩn « #%s » ra ngôn ngữ C truyền thống bằng « # » được thụt lề"
msgstr "khuyên bạn ẩn #%s ra ngôn ngữ C truyền thống bằng # được thụt lề"
#: directives.c:392
msgid "embedding a directive within macro arguments is not portable"
msgstr "việc gắn chỉ thị vào đối số của bộ đối số thì không mạng được"
msgstr "khả năng nhúng chỉ thị vào đối số vĩ lệnh không thể mạng theo"
#: directives.c:412
msgid "style of line directive is a GCC extension"
@ -185,30 +184,30 @@ msgstr "kiểu chỉ thị dòng là phần mở rộng GCC"
#: directives.c:462
#, c-format
msgid "invalid preprocessing directive #%s"
msgstr "chỉ thị tiền xử lý không hợp lệ « #%s »"
msgstr "chỉ thị tiền xử lý không hợp lệ #%s"
#: directives.c:533
msgid "\"defined\" cannot be used as a macro name"
msgstr "không thể sử dụng « defined » (đã định nghĩa) như tên bộ đối số"
msgstr "không thể dùng « defined » (đã xác định) như là tên vĩ lệnh"
#: directives.c:539
#, c-format
msgid "\"%s\" cannot be used as a macro name as it is an operator in C++"
msgstr "không thể sử dụng « %s » như tên bộ đối số vì nó là toán tử trong ngôn ngữ C++"
msgstr "không thể dùng « %s » như là tên vĩ lệnh vì nó là toán tử trong ngôn ngữ C++"
#: directives.c:542
#, c-format
msgid "no macro name given in #%s directive"
msgstr "chỉ thị « #%s » không có tên bộ đối số"
msgstr "chỉ thị #%s không chứa tên vĩ lệnh"
#: directives.c:545
msgid "macro names must be identifiers"
msgstr "mọi tên bộ đối số phải là dấu hiệu nhận diện"
msgstr "mọi tên vĩ lệnh phải là bộ nhận diện"
#: directives.c:586
#, c-format
msgid "undefining \"%s\""
msgstr "đang bỏ định nghĩa « %s »"
msgstr "đang hủy xác định « %s »"
#: directives.c:641
msgid "missing terminating > character"
@ -217,12 +216,12 @@ msgstr "thiếu ký tự « > » chấm dứt"
#: directives.c:696
#, c-format
msgid "#%s expects \"FILENAME\" or <FILENAME>"
msgstr "« #%s » ngờ \"TÊN_TẬP_TIN\" hoặc <TÊN_TẬP_TIN>"
msgstr "#%s ngờ \"TÊN_TẬP_TIN\" hoặc <TÊN_TẬP_TIN>"
#: directives.c:736
#, c-format
msgid "empty filename in #%s"
msgstr "« #%s » có tên tập tin trống"
msgstr "#%s chứa tên tập tin trống"
#: directives.c:746
msgid "#include nested too deeply"
@ -230,21 +229,21 @@ msgstr "« #include » (bao gồm) lồng nhau quá sâu"
#: directives.c:787
msgid "#include_next in primary source file"
msgstr "gặp « #include_next » (bao gồm kế) trong tập tin nguồn chính"
msgstr "gặp « #include_next » (bao gồm kế tiếp) nằm trong tập tin nguồn chính"
#: directives.c:813
#, c-format
msgid "invalid flag \"%s\" in line directive"
msgstr "gặp cờ không hợp lệ « %s » trong chỉ thị dòng"
msgstr "gặp cờ không hợp lệ « %s » nằm trong chỉ thị dòng"
#: directives.c:865
#, c-format
msgid "\"%s\" after #line is not a positive integer"
msgstr "« %s » sau « #line » (dòng) không phải là số nguyên dương"
msgstr "« %s » nằm sau « #line » (dòng) không phải là số nguyên dương"
#: directives.c:871
msgid "line number out of range"
msgstr "số thứ tự dòng ở ngoài phạm vi"
msgstr "số hiệu dòng ở ngoài phạm vi"
#: directives.c:884 directives.c:961
#, c-format
@ -254,17 +253,17 @@ msgstr "« %s » không phải là tên tập tin hợp lệ"
#: directives.c:921
#, c-format
msgid "\"%s\" after # is not a positive integer"
msgstr "« %s » sau « # » không phải là số nguyên dương"
msgstr "« %s » nằm sau « # » không phải là số nguyên dương"
#: directives.c:1023
#, c-format
msgid "invalid #%s directive"
msgstr "chỉ thị « #%s » không hợp lệ"
msgstr "chỉ thị #%s không hợp lệ"
#: directives.c:1112
#, c-format
msgid "registering \"%s\" as both a pragma and a pragma namespace"
msgstr "đang đăng ký « %s » là cả hai lệnh nguồn điều khiển trình biện dịch (pragma), và bô tên độc nhất của lệnh nguồn điều khiển trình biên dịch."
msgstr "đang đăng ký « %s » là cả lệnh nguồn điều khiển trình biện dịch (pragma), lẫn miền tên của lệnh nguồn điều khiển trình biên dịch."
#: directives.c:1115
#, c-format
@ -278,16 +277,16 @@ msgstr "« #pragma %s » đã được đăng ký"
#: directives.c:1362
msgid "#pragma once in main file"
msgstr "« #pragma » một lần trong tập tin chính"
msgstr "« #pragma » một lần trong tập tin chính"
#: directives.c:1385
msgid "invalid #pragma GCC poison directive"
msgstr "gặp chỉ thị vộ hiệu hóa (poison) GCC «#pragma» không hợp lệ"
msgstr "gặp chỉ thị vộ hiệu hóa (poison) GCC « #pragma » không hợp lệ"
#: directives.c:1394
#, c-format
msgid "poisoning existing macro \"%s\""
msgstr "đang vô hiệu hóa bộ đối số tồn tại « %s »"
msgstr "đang vô hiệu hóa vĩ lệnh tồn tại « %s »"
#: directives.c:1415
msgid "#pragma system_header ignored outside include file"
@ -296,44 +295,44 @@ msgstr "« #pragma system_header » (đầu trang hệ thống) bị bỏ qua
#: directives.c:1439
#, c-format
msgid "cannot find source file %s"
msgstr "không tìm thấy tập tin nguồn « %s »"
msgstr "không tìm thấy tập tin nguồn %s"
#: directives.c:1443
#, c-format
msgid "current file is older than %s"
msgstr "tập tin hiện thời là cũ hơn « %s »"
msgstr "tập tin hiện thời là cũ hơn %s"
#: directives.c:1557
msgid "_Pragma takes a parenthesized string literal"
msgstr "« _Pragma » nhận một hằng chuỗi có ngoặc"
msgstr "« _Pragma » nhận một hằng chuỗi được đặt trong ngoặc đơn"
#: directives.c:1658
msgid "#else without #if"
msgstr "« #else » (nếu không) không có « #if » (nếu)"
msgstr "#else (nếu không) không có #if (nếu)"
#: directives.c:1663
msgid "#else after #else"
msgstr "« #else » (nếu không) sau « #else » (nếu không)"
msgstr "#else (nếu không) nằm sau #else"
#: directives.c:1665 directives.c:1698
msgid "the conditional began here"
msgstr "câu điều kiện đã bắt đầu ở đây"
msgstr "bộ điều kiện đã bắt đầu ở đây"
#: directives.c:1691
msgid "#elif without #if"
msgstr "« #elif » (nếu không thì nếu) không có « #if » (nếu)"
msgstr "#elif (nếu không thì nếu) không có #if (nếu)"
#: directives.c:1696
msgid "#elif after #else"
msgstr "« #elif » (nếu không thì nếu) sau « #else » (nếu không)"
msgstr "#elif (nếu không thì nếu) nằm sau #else (nếu không)"
#: directives.c:1726
msgid "#endif without #if"
msgstr "« #endif » (thôi nếu) không có « #if » (nếu)"
msgstr "#endif (thôi nếu) không có #if (nếu)"
#: directives.c:1803
msgid "missing '(' after predicate"
msgstr "thiếu « ( » sau vị ngữ"
msgstr "thiếu « ( » nằm sau vị ngữ"
#: directives.c:1818
msgid "missing ')' to complete answer"
@ -341,15 +340,15 @@ msgstr "thiếu « ) » để xong trả lời"
#: directives.c:1838
msgid "predicate's answer is empty"
msgstr "vị ngữ có trả lời trống"
msgstr "vị ngữ chứa trả lời trống"
#: directives.c:1865
msgid "assertion without predicate"
msgstr "khẳng định không có vị ngữ"
msgstr "sự khẳng định không có vị ngữ"
#: directives.c:1867
msgid "predicate must be an identifier"
msgstr "vị ngữ phải là dấu hiệu nhận diện"
msgstr "vị ngữ phải là bộ nhận diện"
#: directives.c:1953
#, c-format
@ -359,15 +358,15 @@ msgstr "« %s » được khẳng định lại"
#: directives.c:2177
#, c-format
msgid "unterminated #%s"
msgstr "« #%s » chưa chấm dứt"
msgstr "#%s chưa chấm dứt"
#: errors.c:118
msgid "warning: "
msgstr "cảnh báo: "
msgstr "cảnh báo : "
#: errors.c:120
msgid "internal error: "
msgstr "lỗi nôi bộ: "
msgstr "lỗi nôi bộ : "
#: errors.c:122
msgid "error: "
@ -384,29 +383,29 @@ msgstr "%s: %s"
#: expr.c:192
msgid "too many decimal points in number"
msgstr "quá nhiều dấu thập phân trong số"
msgstr "con số chứa quá nhiều dấu thập phân"
#: expr.c:212
#, c-format
msgid "invalid digit \"%c\" in octal constant"
msgstr "gặp số không hợp lệ « %c » trong hằng bát phân"
msgstr "gặp chữ số không hợp lệ « %c » trong hằng bát phân"
#: expr.c:218
msgid "use of C99 hexadecimal floating constant"
msgstr "việc sử dụng hằng trôi nổi hệ thập lục phân C99"
msgstr "dùng hằng trôi nổi thập lục C99"
#: expr.c:227
msgid "exponent has no digits"
msgstr "số mũ không co số nào"
msgstr "số mũ không co chữ số nào"
#: expr.c:234
msgid "hexadecimal floating constants require an exponent"
msgstr "mọi hằng trôi nổi hệ thập lục phân cần đến số mũ"
msgstr "mỗi hằng trôi nổi thập lục cần đến một số mũ"
#: expr.c:240
#, c-format
msgid "invalid suffix \"%.*s\" on floating constant"
msgstr "gặp hậu tố không hợp lệ « %.*s » trên hằng trôi nổi"
msgstr "gặp hậu tố không hợp lệ « %.*s » nằm trên hằng trôi nổi"
#: expr.c:250 expr.c:275
#, c-format
@ -416,11 +415,11 @@ msgstr "ngôn ngữ C truyền thống từ chối hậu tố « %.*s »"
#: expr.c:261
#, c-format
msgid "invalid suffix \"%.*s\" on integer constant"
msgstr "gặp hậu tố không hợp lệ « %.*s » trên hằng số nguyên"
msgstr "gặp hậu tố không hợp lệ « %.*s » nằm trên hằng số nguyên"
#: expr.c:283
msgid "use of C99 long long integer constant"
msgstr "việc sử dụng hằng số nguyên dài dài C99"
msgstr "ng hằng số nguyên dài dài C99"
#: expr.c:290
msgid "imaginary constants are a GCC extension"
@ -428,19 +427,19 @@ msgstr "hằng ảo là phần mở rộng GCC"
#: expr.c:376
msgid "integer constant is too large for its type"
msgstr "hằng số nguyên quá lớn cho loại nó"
msgstr "hằng số nguyên quá lớn cho kiểu nó"
#: expr.c:388
msgid "integer constant is so large that it is unsigned"
msgstr "hằng số nguyên không có dấu dương/âm vì rất lớn"
msgstr "hằng số nguyên quá lớn thì không có dấu"
#: expr.c:470
msgid "missing ')' after \"defined\""
msgstr "thiếu « ) » sau « defined » (đã định nghĩa)"
msgstr "thiếu « ) » nằm sau « defined » (đã xác định)"
#: expr.c:477
msgid "operator \"defined\" requires an identifier"
msgstr "toán tử « defined » (đã định nghĩa) cần đến dấu hiệu nhận diện"
msgstr "toán tử « defined » (đã xác định) cần đến bộ nhận diện"
#: expr.c:485
#, c-format
@ -449,38 +448,38 @@ msgstr "(« %s » là một hiệu bài thay thế cho « %s » trong ngôn ng
#: expr.c:495
msgid "this use of \"defined\" may not be portable"
msgstr "việc sử dụng « defined » (đã định nghĩa) có lẽ không mạng đđược"
msgstr "khả năng dùng « defined » (đã xác định) có lẽ không thể mạng theo"
#: expr.c:534
msgid "floating constant in preprocessor expression"
msgstr "gặp hằng trôi nổi trong biểu thức tiền xử lý"
msgstr "gặp hằng trôi nổi nằm trong biểu thức tiền xử lý"
#: expr.c:540
msgid "imaginary number in preprocessor expression"
msgstr "gặp số ảo trong biểu thức tiền xử lý"
msgstr "gặp số ảo nằm trong biểu thức tiền xử lý"
#: expr.c:585
#, c-format
msgid "\"%s\" is not defined"
msgstr "chưa định nghĩa « %s »"
msgstr "chưa xác định « %s »"
#: expr.c:716 expr.c:745
#, c-format
msgid "missing binary operator before token \"%s\""
msgstr "thiếu toán từ nhị phân trước hiệu bài « %s »"
msgstr "thiếu toán từ nhị phân nằm trước hiệu bài « %s »"
#: expr.c:736
#, c-format
msgid "token \"%s\" is not valid in preprocessor expressions"
msgstr "hiệu bài « %s » không phải là hợp lệ trong biểu thức tiền xử lý"
msgstr "hiệu bài « %s » không hợp lệ trong biểu thức tiền xử lý"
#: expr.c:753
msgid "missing expression between '(' and ')'"
msgstr "thiếu biểu thức giữa « ( » và « ) »"
msgstr "thiếu biểu thức nằm giữa « ( » và « ) »"
#: expr.c:756
msgid "#if with no expression"
msgstr "« #if » (nếu) không có biểu thức"
msgstr "#if (nếu) không có biểu thức"
#: expr.c:759
#, c-format
@ -494,11 +493,11 @@ msgstr "toán tử « %s » không có tác từ bên trái"
#: expr.c:790
msgid " ':' without preceding '?'"
msgstr " « : » không có dấu « ? » đi trước"
msgstr " Dấu hai chấm « : » không có dấu hỏi « ? » đi trước"
#: expr.c:817
msgid "unbalanced stack in #if"
msgstr "có đống không cân bằng trong « #if » (nếu)"
msgstr "có đống không cân bằng trong #if (nếu)"
#: expr.c:836
#, c-format
@ -507,41 +506,41 @@ msgstr "toán từ không thể « %u »"
#: expr.c:928
msgid "missing ')' in expression"
msgstr "thiếu « ) » trong biểu thức"
msgstr "thiếu « ) » nằm trong biểu thức"
#: expr.c:949
msgid "'?' without following ':'"
msgstr "« ? » không có dấu « : » đi sau"
msgstr "Dấu hỏi « ? » không có dấu hai chấm « : » đi sau"
#: expr.c:959
msgid "integer overflow in preprocessor expression"
msgstr "số nguyên tràn trong biểu thức tiền xử lý"
msgstr "tràn số nguyên trong biểu thức tiền xử lý"
#: expr.c:964
msgid "missing '(' in expression"
msgstr "thiếu « ( » trong biểu thức"
msgstr "thiếu « ( » nằm trong biểu thức"
#: expr.c:996
#, c-format
msgid "the left operand of \"%s\" changes sign when promoted"
msgstr "tác tử bên trái của « %s » thay đổi dấu dương/âm khi được tăng cấp"
msgstr "tác tử bên trái của « %s » thay đổi dấu (dương/âm) khi được tăng cấp"
#: expr.c:1001
#, c-format
msgid "the right operand of \"%s\" changes sign when promoted"
msgstr "tác tử bên phai của « %s » thay đổi dấu dương/âm khi đươc tăng cấp"
msgstr "tác tử bên phai của « %s » thay đổi dấu (dương/âm) khi đươc tăng cấp"
#: expr.c:1260
msgid "traditional C rejects the unary plus operator"
msgstr "ngôn ngữ truyền thống C từ chối toán tử cộng chỉ có một tác tử"
msgstr "ngôn ngữ C truyền thống từ chối toán tử cộng chỉ có một tác tử"
#: expr.c:1359
msgid "comma operator in operand of #if"
msgstr "toán tử dấu phẩy trong tác tử của « #if » (nếu)"
msgstr "toán tử dấu phẩy nằm trong tác tử của #if (nếu)"
#: expr.c:1491
msgid "division by zero in #if"
msgstr "chia số không trong « #if » (nếu)"
msgstr "chia số không trong #if (nếu)"
#: files.c:402
msgid "NULL directory in find_file"
@ -558,68 +557,68 @@ msgstr "hãy thử lệnh « -Winvalid-pch » để tìm thấy thông tin thêm
#: files.c:501
#, c-format
msgid "%s is a block device"
msgstr "« %s » là một thiết bị khối"
msgstr "%s là một thiết bị khối"
#: files.c:518
#, c-format
msgid "%s is too large"
msgstr "« %s » quá lớn"
msgstr "%s quá lớn"
#: files.c:553
#, c-format
msgid "%s is shorter than expected"
msgstr "ngờ « %s » dài hơn"
msgstr "ngờ %s dài hơn"
#: files.c:782
#, c-format
msgid "no include path in which to search for %s"
msgstr "việc tìm kiếm « %s » không có đường dẫn bao gồm"
msgstr "không có đường dẫn bao gồm trong đó có thể tìm kíếm %s"
#: files.c:1071
msgid "Multiple include guards may be useful for:\n"
msgstr "Nhiều điều bảo vệ bao gồm có lẽ hiệu ích cho:\n"
msgstr "Nhiều điều bảo vệ bao gồm có lẽ hiệu ích cho :\n"
#: init.c:406
msgid "cppchar_t must be an unsigned type"
msgstr "« cppchar_t » phải là loại không có dấu dương/âm"
msgstr "« cppchar_t » phải là kiểu không có dấu dương/âm"
#: init.c:410
#, c-format
msgid "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits"
msgstr "toán thuật của trình tiền xử lý có độ chính xác tối đa là « %lu » bit còn đích cần đến « %lu » bit"
msgstr "toán thuật của trình tiền xử lý có độ chính xác tối đa là %lu bit còn đích cần đến %lu bit"
#: init.c:417
msgid "CPP arithmetic must be at least as precise as a target int"
msgstr "toán thuật CPP phải là ít nhất chính xác bằng int (số nguyên) đích"
msgstr "toán thuật CPP phải là ít nhất cùng chính xác với « int » đích"
#: init.c:420
msgid "target char is less than 8 bits wide"
msgstr "độ rộng char (ký tự) đích là ít hơn 8 bit"
msgstr "« char » đích có độ rộng ít hơn 8 bit"
#: init.c:424
msgid "target wchar_t is narrower than target char"
msgstr "độ rộng « wchar_t » đích là ít hơn char (ký tự) đích"
msgstr "« wchar_t » đích có độ rộng ít hơn « char » đích"
#: init.c:428
msgid "target int is narrower than target char"
msgstr "độ rộng int (số nguyên) đích là hẹp hơn char (ký tự) đích"
msgstr "« int » đích có độ rộng ít hơn « char » đích"
#: init.c:433
msgid "CPP half-integer narrower than CPP character"
msgstr "độ rộng nữa số nguyên CPP là hẹp hơn ký tự CPP"
msgstr "nữa số nguyên CPP có độ rộng ít hơn ký tự CPP"
#: init.c:437
#, c-format
msgid "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits"
msgstr "Trên máy này, CPP không xử lý được hằng ký tự rộng hơn « %lu » bit, còn đích cần « %lu » bit"
msgstr "Trên máy này, CPP không thể xử lý hằng ký tự rộng hơn %lu bit, còn đích cần thiết %lu bit"
#: lex.c:271
msgid "backslash and newline separated by space"
msgstr "xuyệc ngược và ký tự dòng mới phân cách nhau bởi chữ cách"
msgstr "xuyệc ngược và ký tự dòng mới phân cách nhau bởi dấu cách"
#: lex.c:276
msgid "backslash-newline at end of file"
msgstr "gặp xuyệc ngược - ký tự dòng mới tại kết thức tập tin"
msgstr "gặp xuyệc ngược-ký tự dòng mới tại kết thúc của tập tin"
#: lex.c:291
#, c-format
@ -633,55 +632,55 @@ msgstr "chữ ba « ??%c » bị bỏ qua nên hãy sư dụng tùy chon « -tri
#: lex.c:344
msgid "\"/*\" within comment"
msgstr "gặp « /* » trong chú thích"
msgstr "gặp « /* » nằm trong chú thích"
#: lex.c:402
#, c-format
msgid "%s in preprocessing directive"
msgstr "gặp « %s » trong chỉ thị tiền xử lý"
msgstr "gặp %s nằm trong chỉ thị tiền xử lý"
#: lex.c:411
msgid "null character(s) ignored"
msgstr "mọi ký tự rỗng bị bỏ qua"
msgstr "(mọi) ký tự rỗng bị bỏ qua"
#: lex.c:448
#, c-format
msgid "`%.*s' is not in NFKC"
msgstr "« %.*s » không phải trong NKFC"
msgstr "« %.*s » không phải nằm trong NFKC"
#: lex.c:451
#, c-format
msgid "`%.*s' is not in NFC"
msgstr "« %.*s » không phải trong NFC"
msgstr "« %.*s » không phải nằm trong NFC"
#: lex.c:539
#, c-format
msgid "attempt to use poisoned \"%s\""
msgstr "đã cố sử dụng « %s » bị vô hiệu hóa"
msgstr "đã cố gắng dùng « %s » bị vô hiệu hóa"
#: lex.c:547
msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro"
msgstr "« __VA_ARGS__ » chỉ có thể xuất hiện trong phần mở rộng của bộ đối số biến thiên C99"
msgstr "« __VA_ARGS__ » chỉ có thể xuất hiện trong sự mở rộng của vĩ lệnh biến thiên C99"
#: lex.c:647
msgid "null character(s) preserved in literal"
msgstr "các ký tự rỗng được giữ trong hằng nguồn"
msgstr "(các) ký tự rỗng được giữ lại trong điều nghĩa chữ"
#: lex.c:838
msgid "no newline at end of file"
msgstr "không có ký tự dòng mới tại kêt thức tập tin"
msgstr "không có ký tự dòng mới tại kêt thúc của tập tin"
#: lex.c:990 traditional.c:162
msgid "unterminated comment"
msgstr "gặp chú thích không chấm dứt"
msgstr "gặp chú thích chưa được chấm dứt"
#: lex.c:1001
msgid "C++ style comments are not allowed in ISO C90"
msgstr "không cho phép chú thích kiểu C++ trong ISO C90"
msgstr "không cho phép chú thích kiểu C++ nằm trong ISO C90"
#: lex.c:1003
msgid "(this will be reported only once per input file)"
msgstr "(chỉ sẽ thông báo điều này một lần cho mỗi tập tin gõ"
msgstr "(điều này sẽ được thông báo chỉ một lần cho mỗi tập tin nhập)"
#: lex.c:1008
msgid "multi-line comment"
@ -690,12 +689,12 @@ msgstr "gặp chú thích đa dòng"
#: lex.c:1331
#, c-format
msgid "unspellable token %s"
msgstr "gặp hiệu bài không chính tả được « %s »"
msgstr "gặp hiệu bài không thể chính tả %s"
#: line-map.c:313
#, c-format
msgid "In file included from %s:%u"
msgstr "Trong tập tin được bao gồm từ « %s:%u »"
msgstr "Trong tập tin được bao gồm từ %s:%u"
#: line-map.c:331
#, c-format
@ -704,7 +703,7 @@ msgid ""
" from %s:%u"
msgstr ""
",\n"
" từ « %s:%u »"
" từ %s:%u"
#: macro.c:85
#, c-format
@ -714,54 +713,54 @@ msgstr "bộ đối số « %s » không được dùng"
#: macro.c:124 macro.c:283
#, c-format
msgid "invalid built-in macro \"%s\""
msgstr "bộ đối số « %s » có sẳn không hợp lệ"
msgstr "vĩ lệnh có sẳn không hợp lệ « %s »"
#: macro.c:217
msgid "could not determine date and time"
msgstr "không quyết định được ngày và giờ"
msgstr "không thể quyết định ngày và giờ"
#: macro.c:387
msgid "invalid string literal, ignoring final '\\'"
msgstr "hằng nguồn chuỗi không hợp lệ nên bỏ qua « \\ » cuối cùng"
msgstr "điều nghĩa chữ chuỗi không hợp lệ nên bỏ qua « \\ » cuối cùng"
#: macro.c:470
#, c-format
msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token"
msgstr "việc dán « %s » và « %s » không cho bài tiền xử lý hợp lệ"
msgstr "việc dán « %s » và « %s » không đưa ra hiệu bài tiền xử lý hợp lệ"
#: macro.c:508
msgid "ISO C99 requires rest arguments to be used"
msgstr "ISO C99 cần đến việc sử dụng đối số còn lại trong khối"
msgstr "ISO C99 cần đến đối số còn lại trong khối được dùng"
#: macro.c:513
#, c-format
msgid "macro \"%s\" requires %u arguments, but only %u given"
msgstr "bộ đối số « %s » cần đến « %u » đối số, nhưng chỉ cho « %u » thôi"
msgstr "vĩ lệnh « %s » cần đến %u đối số, nhưng chỉ đưa ra %u thôi"
#: macro.c:518
#, c-format
msgid "macro \"%s\" passed %u arguments, but takes just %u"
msgstr "bộ đối số « %s » đã gởi « %u » đối số, nhưng nhận chỉ « %u » thôi"
msgstr "vĩ lệnh « %s » đã gởi %u đối số, nhưng nhận chỉ %u thôi"
#: macro.c:629 traditional.c:675
#, c-format
msgid "unterminated argument list invoking macro \"%s\""
msgstr "danh sách đối số không chấm dứt thì gọi bộ đối số « %s »"
msgstr "danh sách đối số không được chấm dứt có gọi vĩ lệnh « %s »"
#: macro.c:732
#, c-format
msgid "function-like macro \"%s\" must be used with arguments in traditional C"
msgstr "phải sử dụng đối số với bộ đối số giống hàm số « %s » trong ngôn ngữ C truyền thống"
msgstr "vĩ lệnh giống hàm số « %s » phải được dùng với đối số trong ngôn ngữ C truyền thống"
#: macro.c:1248
#, c-format
msgid "duplicate macro parameter \"%s\""
msgstr "tham số bộ đối số trùng « %s »"
msgstr "tham số vĩ lệnh trùng « %s »"
#: macro.c:1294
#, c-format
msgid "\"%s\" may not appear in macro parameter list"
msgstr "không cho phép « %s » trong danh sách tham số bộ đối số"
msgstr "không cho phép « %s » xuất hiện trong danh sách tham số vĩ lệnh"
#: macro.c:1302
msgid "macro parameters must be comma-separated"
@ -773,11 +772,11 @@ msgstr "thiếu tên tham số"
#: macro.c:1336
msgid "anonymous variadic macros were introduced in C99"
msgstr "bộ đối số biến thiên nặc danh được giới thiệu trong C99"
msgstr "vĩ lệnh biến thiên vô danh đã được giới thiệu trong C99"
#: macro.c:1341
msgid "ISO C does not permit named variadic macros"
msgstr "ISO C không cho phép bộ đối số biến thiên có tên"
msgstr "ISO C không cho phép vĩ lệnh biến thiên có tên"
#: macro.c:1350
msgid "missing ')' in macro parameter list"
@ -785,67 +784,67 @@ msgstr "thiếu « ) » trong danh sách tham số bộ đối số"
#: macro.c:1428
msgid "ISO C99 requires whitespace after the macro name"
msgstr "ISO C99 cần đến chữ cách sau tên bộ đối số"
msgstr "ISO C99 cần đến khoảng trắng nằm sau tên vĩ lệnh"
#: macro.c:1452
msgid "missing whitespace after the macro name"
msgstr "thiếu chữ cách sau tên bộ đối số"
msgstr "thiếu khoảng trắng nằm sau tên vĩ lệnh"
#: macro.c:1482
msgid "'#' is not followed by a macro parameter"
msgstr "« # » không có tham số bộ đối số đi theo"
msgstr "« # » không có tham số vĩ lệnh đi theo"
#: macro.c:1501
msgid "'##' cannot appear at either end of a macro expansion"
msgstr "không cho phép « ## » hoặc trước hoặc sau phần mở rộng bộ đối số"
msgstr "không cho phép « ## » nằm hoặc trước hoặc sau sự mở rộng vĩ lệnh"
#: macro.c:1599
#, c-format
msgid "\"%s\" redefined"
msgstr "« %s » l đã được định nghĩa lại"
msgstr "« %s » đã được xác định lại"
#: macro.c:1604
msgid "this is the location of the previous definition"
msgstr "đây là vị trí của lời định nghĩa trước"
msgstr "đây là vị trí của lời xác định trước"
#: macro.c:1654
#, c-format
msgid "macro argument \"%s\" would be stringified in traditional C"
msgstr "đối số bộ đối số « %s » nên được chuyển đổi thành chuỗi trong ngôn ngữ C truyền thống"
msgstr "đối số vĩ lệnh « %s » nên được chuyển đổi thành chuỗi trong ngôn ngữ C truyền thống"
#: macro.c:1677
#, c-format
msgid "invalid hash type %d in cpp_macro_definition"
msgstr "gặp loại băm không hợp lệ « %d » trong « cpp_macro_definition » (lời định nghĩa bộ đối số)"
msgstr "gặp kiểu băm không hợp lệ %d trong « cpp_macro_definition » (lời xác định vĩ lệnh)"
#: pch.c:84 pch.c:332 pch.c:354 pch.c:360
msgid "while writing precompiled header"
msgstr "trong khi ghi đầu trang tiền biên dịch"
msgstr "trong khi ghi đầu trang biên dịch sẵn"
#: pch.c:467
#, c-format
msgid "%s: not used because `%.*s' not defined"
msgstr "không sử dụng « %s » vì chưa định nghĩa « %.*s »"
msgstr "%s: không được dùng vì chưa xác định « %.*s »"
#: pch.c:479
#, c-format
msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'"
msgstr "không sử dụng « %s » vì đã định nghĩa « %.*s » là « %s », không phải « %.*s »"
msgstr "%s: không được dùng vì « %.*s » đã được xác định là « %s » không phải « %.*s »"
#: pch.c:520
#, c-format
msgid "%s: not used because `%s' is defined"
msgstr "không sử dụng « %s » vì đã định nghĩa « %s »"
msgstr "%s: không được dùng vì « %s » đã được xác định"
#: pch.c:533 pch.c:696
msgid "while reading precompiled header"
msgstr "trong khi đọc đầu trang tiền biên dịcch"
msgstr "trong khi đọc đầu trang biên dịch sẵn"
#: traditional.c:745
#, c-format
msgid "detected recursion whilst expanding macro \"%s\""
msgstr "đã phát hiện điều độ qui trong khi mở rộng bộ đối số « %s »"
msgstr "đã phát hiện sự đệ qui trong khi mở rộng vĩ lệnh « %s »"
#: traditional.c:912
msgid "syntax error in macro parameter list"
msgstr "gặp lỗi cú pháp trong danh sách tham số bộ đối số"
msgstr "gặp lỗi cú pháp trong danh sách tham số vĩ lệnh"

View File

@ -1,3 +1,19 @@
2006-08-27 Ian Lance Taylor <ian@airs.com>
PR driver/27622
* pex-common.h (struct pex_funcs): Add toclose parameter to
exec_child field.
* pex-common.c (pex_run_in_environment): Pass toclose to
exec_child.
* pex-djgpp.c (pex_djgpp_exec_child): Add toclose parameter.
* pex-unix.c (pex_unix_exec_child): Likewise.
* pex-msdos.c (pex_msdos_exec_child): Likewise.
* pex-win32.c (pex_win32_exec_child): Likewise.
2006-07-04 Peter O'Gorman <peter@pogma.com>
* Makefile.in: chmod 644 before ranlib during install.
2006-05-24 Release Manager
* GCC 4.1.1 released.

View File

@ -280,7 +280,7 @@ install: install_to_$(INSTALL_DEST) install-subdir
install_to_libdir: all
${mkinstalldirs} $(DESTDIR)$(libdir)$(MULTISUBDIR)
$(INSTALL_DATA) $(TARGETLIB) $(DESTDIR)$(libdir)$(MULTISUBDIR)/$(TARGETLIB)n
( cd $(DESTDIR)$(libdir)$(MULTISUBDIR) ; $(RANLIB) $(TARGETLIB)n )
( cd $(DESTDIR)$(libdir)$(MULTISUBDIR) ; chmod 644 $(TARGETLIB)n ;$(RANLIB) $(TARGETLIB)n )
mv -f $(DESTDIR)$(libdir)$(MULTISUBDIR)/$(TARGETLIB)n $(DESTDIR)$(libdir)$(MULTISUBDIR)/$(TARGETLIB)
if test -n "${target_header_dir}"; then \
case "${target_header_dir}" in \
@ -302,7 +302,7 @@ MULTIOSDIR = `$(CC) $(LIBCFLAGS) -print-multi-os-directory`
install_to_tooldir: all
${mkinstalldirs} $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR)
$(INSTALL_DATA) $(TARGETLIB) $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR)/$(TARGETLIB)n
( cd $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR) ; $(RANLIB) $(TARGETLIB)n )
( cd $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR) ; chmod 644 $(TARGETLIB)n; $(RANLIB) $(TARGETLIB)n )
mv -f $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR)/$(TARGETLIB)n $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR)/$(TARGETLIB)
@$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install

View File

@ -103,6 +103,7 @@ pex_run (struct pex_obj *obj, int flags, const char *executable,
char *outname;
int outname_allocated;
int p[2];
int toclose;
long pid;
in = -1;
@ -272,10 +273,18 @@ pex_run (struct pex_obj *obj, int flags, const char *executable,
}
}
/* If we are using pipes, the child process has to close the next
input pipe. */
if ((obj->flags & PEX_USE_PIPES) == 0)
toclose = -1;
else
toclose = obj->next_input;
/* Run the program. */
pid = obj->funcs->exec_child (obj, flags, executable, argv, in, out, errdes,
&errmsg, err);
toclose, &errmsg, err);
if (pid < 0)
goto error_exit;

View File

@ -93,15 +93,17 @@ struct pex_funcs
binary mode. Return >= 0 on success, -1 on error. */
int (*open_write) (struct pex_obj *, const char *name, int binary);
/* Execute a child process. FLAGS, EXECUTABLE, ARGV, ERR are from
pex_run. IN, OUT, ERRDES are each a descriptor, from open_read,
open_write, or pipe, or they are one of STDIN_FILE_NO,
pex_run. IN, OUT, ERRDES, TOCLOSE are each a descriptor, from
open_read, open_write, or pipe, or they are one of STDIN_FILE_NO,
STDOUT_FILE_NO or STDERR_FILE_NO; if not STD*_FILE_NO, they
should be closed. The function should handle the
PEX_STDERR_TO_STDOUT flag. Return >= 0 on success, or -1 on
error and set *ERRMSG and *ERR. */
should be closed. If the descriptor TOCLOSE is not -1, and the
system supports pipes, TOCLOSE should be closed in the child
process. The function should handle the PEX_STDERR_TO_STDOUT
flag. Return >= 0 on success, or -1 on error and set *ERRMSG and
*ERR. */
long (*exec_child) (struct pex_obj *, int flags, const char *executable,
char * const * argv, int in, int out, int errdes,
const char **errmsg, int *err);
int /* toclose */, const char **errmsg, int *err);
/* Close a descriptor. Return 0 on success, -1 on error. */
int (*close) (struct pex_obj *, int);
/* Wait for a child to complete, returning exit status in *STATUS

View File

@ -45,7 +45,7 @@ extern int errno;
static int pex_djgpp_open_read (struct pex_obj *, const char *, int);
static int pex_djgpp_open_write (struct pex_obj *, const char *, int);
static long pex_djgpp_exec_child (struct pex_obj *, int, const char *,
char * const *, int, int, int,
char * const *, int, int, int, int,
const char **, int *);
static int pex_djgpp_close (struct pex_obj *, int);
static int pex_djgpp_wait (struct pex_obj *, long, int *, struct pex_time *,
@ -111,6 +111,7 @@ pex_djgpp_close (struct pex_obj *obj ATTRIBUTE_UNUSED, int fd)
static long
pex_djgpp_exec_child (struct pex_obj *obj, int flags, const char *executable,
char * const * argv, int in, int out, int errdes,
int toclose ATTRIBUTE_UNUSED,
const char **errmsg, int *err)
{
int org_in, org_out, org_errdes;

View File

@ -55,7 +55,7 @@ static int pex_msdos_open (struct pex_obj *, const char *, int);
static int pex_msdos_open (struct pex_obj *, const char *, int);
static int pex_msdos_fdindex (struct pex_msdos *, int);
static long pex_msdos_exec_child (struct pex_obj *, int, const char *,
char * const *, int, int, int,
char * const *, int, int, int, int,
const char **, int *);
static int pex_msdos_close (struct pex_obj *, int);
static int pex_msdos_wait (struct pex_obj *, long, int *, struct pex_time *,
@ -153,6 +153,7 @@ pex_msdos_close (struct pex_obj *obj, int fd)
static long
pex_msdos_exec_child (struct pex_obj *obj, int flags, const char *executable,
char * const * argv, int in, int out,
int toclose ATTRIBUTE_UNUSED,
int errdes ATTRIBUTE_UNUSED, const char **errmsg,
int *err)
{

View File

@ -270,7 +270,7 @@ static void pex_child_error (struct pex_obj *, const char *, const char *, int)
static int pex_unix_open_read (struct pex_obj *, const char *, int);
static int pex_unix_open_write (struct pex_obj *, const char *, int);
static long pex_unix_exec_child (struct pex_obj *, int, const char *,
char * const *, int, int, int,
char * const *, int, int, int, int,
const char **, int *);
static int pex_unix_close (struct pex_obj *, int);
static int pex_unix_wait (struct pex_obj *, long, int *, struct pex_time *,
@ -353,7 +353,7 @@ pex_child_error (struct pex_obj *obj, const char *executable,
static long
pex_unix_exec_child (struct pex_obj *obj, int flags, const char *executable,
char * const * argv, int in, int out, int errdes,
const char **errmsg, int *err)
int toclose, const char **errmsg, int *err)
{
pid_t pid;
/* We declare these to be volatile to avoid warnings from gcc about
@ -402,6 +402,11 @@ pex_unix_exec_child (struct pex_obj *obj, int flags, const char *executable,
if (close (errdes) < 0)
pex_child_error (obj, executable, "close", errno);
}
if (toclose >= 0)
{
if (close (toclose) < 0)
pex_child_error (obj, executable, "close", errno);
}
if ((flags & PEX_STDERR_TO_STDOUT) != 0)
{
if (dup2 (STDOUT_FILE_NO, STDERR_FILE_NO) < 0)

View File

@ -184,7 +184,7 @@ fix_argv (char * const *argvec)
static int pex_win32_open_read (struct pex_obj *, const char *, int);
static int pex_win32_open_write (struct pex_obj *, const char *, int);
static long pex_win32_exec_child (struct pex_obj *, int, const char *,
char * const *, int, int, int,
char * const *, int, int, int, int,
const char **, int *);
static int pex_win32_close (struct pex_obj *, int);
static int pex_win32_wait (struct pex_obj *, long, int *,
@ -493,7 +493,9 @@ spawn_script (const char *executable, const char * const * argv)
static long
pex_win32_exec_child (struct pex_obj *obj ATTRIBUTE_UNUSED, int flags,
const char *executable, char * const * argv,
int in, int out, int errdes, const char **errmsg,
int in, int out, int errdes,
int toclose ATTRIBUTE_UNUSED,
const char **errmsg,
int *err)
{
int org_in, org_out, org_errdes;

View File

@ -1,3 +1,72 @@
2006-10-16 Jakub Jelinek <jakub@redhat.com>
* include/bits/basic_string.tcc (_Rep::_S_create): Call
_M_set_sharable() for backwards compatibility.
2006-10-09 Benjamin Kosnik <bkoz@redhat.com>
PR libstdc++/29095
* libsupc++/cxxabi.h (__cxa_cdtor_type): Explicit "C" linkage.
* config/cpu/arm/cxxabi_tweaks.h: Same.
* config/cpu/generic/cxxabi_tweaks.h: Same.
2006-10-06 Paolo Carlini <pcarlini@suse.de>
PR libstdc++/29368
* include/bits/basic_string.h: Adjust rfind documentation.
* include/ext/vstring.h: Likewise.
2006-10-06 Paolo Carlini <pcarlini@suse.de>
PR libstdc++/29354
* include/bits/sstream.tcc (basic_stringbuf<>::seekpos(pos_type,
ios_base::openmode)): Allow for seek to pos_type(off_type(0))
when the stream is empty.
* testsuite/27_io/basic_stringbuf/seekpos/char/29354.cc: New.
* testsuite/27_io/basic_stringbuf/seekpos/wchar_t/29354.cc: New.
2006-09-29 Joseph S. Myers <joseph@codesourcery.com>
* acinclude.m4 (enable_symvers): Default to no if unable to link.
* configure: Regenerate.
2006-09-25 Howard Hinnant <hhinnant@apple.com>
PR libstdc++/29224
* include/tr1/functional_iterate.h: Avoid -Wshadow warnings.
2006-09-25 Paolo Carlini <pcarlini@suse.de>
PR libstdc++/29179
* include/ext/mt_allocator.h (__pool_base): Adjust/extend
documentation in comments.
2006-08-18 Paolo Carlini <pcarlini@suse.de>
PR libstdc++/28765
* include/ext/rc_string_base.h (_M_clear): New.
* include/ext/sso_string_base.h (_M_clear): Likewise.
* include/ext/vstring.h (clear): Use it.
2006-07-03 Paolo Carlini <pcarlini@suse.de>
* include/ext/rc_string_base.h (__rc_string_base::_S_max_size):
Adjust, take into account rounding in _M_create.
(__rc_string_base::_M_create): Add early _S_max_size check.
2006-07-03 Ian Lance Taylor <ian@airs.com>
Paolo Carlini <pcarlini@suse.de>
* include/ext/rc_string_base.h (__rc_string_base::_S_max_size):
Increase by a factor of two.
* include/ext/sso_string_base.h (__sso_string_base::_S_max_size):
Likewise.
2006-07-03 Paolo Carlini <pcarlini@suse.de>
* include/ext/sso_string_base.h (__sso_string_base::_M_create): Never
allocate a string bigger than _S_max_size.
2006-05-26 Paolo Carlini <pcarlini@suse.de>
* include/tr1/hashtable: Minor cosmetic changes.

View File

@ -1730,7 +1730,7 @@ AC_REQUIRE([GLIBCXX_CHECK_LINKER_FEATURES])
# Turn a 'yes' into a suitable default.
if test x$enable_symvers = xyes ; then
if test $enable_shared = no ||
test "x$LD" = x ; then
test "x$LD" = x || test x$gcc_no_link = xyes; then
enable_symvers=no
elif test $with_gnu_ld = yes ; then
enable_symvers=gnu

View File

@ -1,6 +1,6 @@
// Control various target specific ABI tweaks. ARM version.
// Copyright (C) 2004 Free Software Foundation, Inc.
// Copyright (C) 2004, 2006 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@ -33,6 +33,8 @@
#ifdef __cplusplus
namespace __cxxabiv1
{
extern "C"
{
#endif
#ifdef __ARM_EABI__
@ -67,7 +69,8 @@ namespace __cxxabiv1
#endif //!__ARM_EABI__
#ifdef __cplusplus
}
} // namespace __cxxabiv1
#endif
#endif // __cxxabiv1
#endif

View File

@ -1,6 +1,6 @@
// Control various target specific ABI tweaks. Generic version.
// Copyright (C) 2004 Free Software Foundation, Inc.
// Copyright (C) 2004, 2006 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@ -33,6 +33,8 @@
#ifdef __cplusplus
namespace __cxxabiv1
{
extern "C"
{
#endif
// The generic ABI uses the first byte of a 64-bit guard variable.
@ -47,7 +49,8 @@ namespace __cxxabiv1
typedef void __cxa_cdtor_return_type;
#ifdef __cplusplus
}
} // namespace __cxxabiv1
#endif
#endif // __cxxabiv1
#endif

View File

@ -1,6 +1,6 @@
// Components for manipulating sequences of characters -*- C++ -*-
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@ -1623,7 +1623,7 @@ namespace std
/**
* @brief Find last position of a C string.
* @param s C string to locate.
* @param pos Index of character to start search at (default 0).
* @param pos Index of character to start search at (default end).
* @return Index of start of last occurrence.
*
* Starting from @a pos, searches backward for the value of @a s within
@ -1640,7 +1640,7 @@ namespace std
/**
* @brief Find last position of a character.
* @param c Character to locate.
* @param pos Index of character to search back from (default 0).
* @param pos Index of character to search back from (default end).
* @return Index of last occurrence.
*
* Starting from @a pos, searches backward for @a c within this string.

View File

@ -588,6 +588,14 @@ namespace std
void* __place = _Raw_bytes_alloc(__alloc).allocate(__size);
_Rep *__p = new (__place) _Rep;
__p->_M_capacity = __capacity;
// ABI compatibility - 3.4.x set in _S_create both
// _M_refcount and _M_length. All callers of _S_create
// in basic_string.tcc then set just _M_length.
// In 4.0.x and later both _M_refcount and _M_length
// are initialized in the callers, unfortunately we can
// have 3.4.x compiled code with _S_create callers inlined
// calling 4.0.x+ _S_create.
__p->_M_set_sharable();
return __p;
}

View File

@ -198,7 +198,7 @@ namespace std
const bool __testout = (ios_base::out & this->_M_mode & __mode) != 0;
const char_type* __beg = __testin ? this->eback() : this->pbase();
if (__beg && (__testin || __testout))
if ((__beg || !off_type(__sp)) && (__testin || __testout))
{
_M_update_egptr();

View File

@ -48,7 +48,7 @@ namespace __gnu_cxx
struct __pool_base
{
// Using short int as type for the binmap implies we are never
// caching blocks larger than 65535 with this allocator.
// caching blocks larger than 32768 with this allocator.
typedef unsigned short int _Binmap_type;
// Variables used to configure the behavior of the allocator,
@ -71,19 +71,23 @@ namespace __gnu_cxx
// Allocation requests (after round-up to power of 2) below
// this value will be handled by the allocator. A raw new/
// call will be used for requests larger than this value.
// NB: Must be much smaller than _M_chunk_size and in any
// case <= 32768.
size_t _M_max_bytes;
// Size in bytes of the smallest bin.
// NB: Must be a power of 2 and >= _M_align.
// NB: Must be a power of 2 and >= _M_align (and of course
// much smaller than _M_max_bytes).
size_t _M_min_bin;
// In order to avoid fragmenting and minimize the number of
// new() calls we always request new memory using this
// value. Based on previous discussions on the libstdc++
// mailing list we have choosen the value below.
// See http://gcc.gnu.org/ml/libstdc++/2001-07/msg00077.html
// NB: At least one order of magnitude > _M_max_bytes.
size_t _M_chunk_size;
// The maximum number of supported threads. For
// single-threaded operation, use one. Maximum values will
// vary depending on details of the underlying system. (For
@ -91,7 +95,7 @@ namespace __gnu_cxx
// /proc/sys/kernel/threads-max, while Linux 2.6.6 reports
// 65534)
size_t _M_max_threads;
// Each time a deallocation occurs in a threaded application
// we make sure that there are no more than
// _M_freelist_headroom % of used memory on the freelist. If

View File

@ -175,11 +175,13 @@ namespace __gnu_cxx
// with a terminating character and m _CharT elements, it'd
// look like this:
// npos = sizeof(_Rep) + (m * sizeof(_CharT)) + sizeof(_CharT)
// + sizeof(_Rep) - 1
// (NB: last two terms for rounding reasons, see _M_create below)
// Solving for m:
// m = ((npos - sizeof(_Rep)) / sizeof(_CharT)) - 1
// In addition, this implementation quarters this amount.
enum { _S_max_size = (((static_cast<size_type>(-1) - sizeof(_Rep))
/ sizeof(_CharT)) - 1) / 4 };
// m = ((npos - 2 * sizeof(_Rep) + 1) / sizeof(_CharT)) - 1
// In addition, this implementation halfs this amount.
enum { _S_max_size = (((static_cast<size_type>(-1) - 2 * sizeof(_Rep)
+ 1) / sizeof(_CharT)) - 1) / 2 };
// Data Member (private):
mutable typename _Util_Base::template _Alloc_hider<_Alloc> _M_dataplus;
@ -335,6 +337,10 @@ namespace __gnu_cxx
void
_M_erase(size_type __pos, size_type __n);
void
_M_clear()
{ _M_erase(size_type(0), _M_length()); }
bool
_M_compare(const __rc_string_base&) const
{ return false; }
@ -385,7 +391,12 @@ namespace __gnu_cxx
// meet amortized linear time requirements of the library: see
// http://gcc.gnu.org/ml/libstdc++/2001-07/msg00085.html.
if (__capacity > __old_capacity && __capacity < 2 * __old_capacity)
__capacity = 2 * __old_capacity;
{
__capacity = 2 * __old_capacity;
// Never allocate a string bigger than _S_max_size.
if (__capacity > size_type(_S_max_size))
__capacity = size_type(_S_max_size);
}
// NB: Need an array of char_type[__capacity], plus a terminating
// null char_type() element, plus enough for the _Rep data structure,
@ -400,7 +411,6 @@ namespace __gnu_cxx
{
const size_type __extra = __pagesize - __adj_size % __pagesize;
__capacity += __extra / sizeof(_CharT);
// Never allocate a string bigger than _S_max_size.
if (__capacity > size_type(_S_max_size))
__capacity = size_type(_S_max_size);
__size = (__capacity + 1) * sizeof(_CharT) + 2 * sizeof(_Rep) - 1;

View File

@ -61,9 +61,9 @@ namespace __gnu_cxx
// npos = m * sizeof(_CharT) + sizeof(_CharT)
// Solving for m:
// m = npos / sizeof(_CharT) - 1
// In addition, this implementation quarters this amount.
// In addition, this implementation halfs this amount.
enum { _S_max_size = (((static_cast<size_type>(-1)
/ sizeof(_CharT)) - 1) / 4) };
/ sizeof(_CharT)) - 1) / 2) };
// Data Members (private):
typename _Util_Base::template _Alloc_hider<_CharT_alloc_type>
@ -226,6 +226,10 @@ namespace __gnu_cxx
void
_M_erase(size_type __pos, size_type __n);
void
_M_clear()
{ _M_set_length(0); }
bool
_M_compare(const __sso_string_base&) const
{ return false; }
@ -324,7 +328,12 @@ namespace __gnu_cxx
// meet amortized linear time requirements of the library: see
// http://gcc.gnu.org/ml/libstdc++/2001-07/msg00085.html.
if (__capacity > __old_capacity && __capacity < 2 * __old_capacity)
__capacity = 2 * __old_capacity;
{
__capacity = 2 * __old_capacity;
// Never allocate a string bigger than _S_max_size.
if (__capacity > size_type(_S_max_size))
__capacity = size_type(_S_max_size);
}
// NB: Need an array of char_type[__capacity], plus a terminating
// null char_type() element.

View File

@ -1,6 +1,6 @@
// Versatile string -*- C++ -*-
// Copyright (C) 2005 Free Software Foundation, Inc.
// Copyright (C) 2005, 2006 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@ -409,7 +409,7 @@ namespace __gnu_cxx
*/
void
clear()
{ this->_M_erase(size_type(0), this->size()); }
{ this->_M_clear(); }
/**
* Returns true if the %string is empty. Equivalent to *this == "".
@ -1365,7 +1365,7 @@ namespace __gnu_cxx
/**
* @brief Find last position of a C string.
* @param s C string to locate.
* @param pos Index of character to start search at (default 0).
* @param pos Index of character to start search at (default end).
* @return Index of start of last occurrence.
*
* Starting from @a pos, searches backward for the value of @a s within
@ -1382,7 +1382,7 @@ namespace __gnu_cxx
/**
* @brief Find last position of a character.
* @param c Character to locate.
* @param pos Index of character to search back from (default 0).
* @param pos Index of character to search back from (default end).
* @return Index of last occurrence.
*
* Starting from @a pos, searches backward for @a c within this string.

View File

@ -1,6 +1,6 @@
// TR1 functional -*- C++ -*-
// Copyright (C) 2005 Free Software Foundation, Inc.
// Copyright (C) 2005, 2006 Free Software Foundation, Inc.
// Written by Douglas Gregor <doug.gregor -at- gmail.com>
//
// This file is part of the GNU ISO C++ Library. This library is free
@ -199,7 +199,7 @@ template<typename _Res, typename _Class _GLIBCXX_COMMA_SHIFTED
public:
typedef _Res result_type;
explicit _Mem_fn(_Functor __pmf) : __pmf(__pmf) { }
explicit _Mem_fn(_Functor __pf) : __pmf(__pf) { }
// Handle objects
_Res
@ -253,7 +253,7 @@ template<typename _Res, typename _Class _GLIBCXX_COMMA_SHIFTED
public:
typedef _Res result_type;
explicit _Mem_fn(_Functor __pmf) : __pmf(__pmf) { }
explicit _Mem_fn(_Functor __pf) : __pmf(__pf) { }
// Handle objects
_Res
@ -307,7 +307,7 @@ template<typename _Res, typename _Class _GLIBCXX_COMMA_SHIFTED
public:
typedef _Res result_type;
explicit _Mem_fn(_Functor __pmf) : __pmf(__pmf) { }
explicit _Mem_fn(_Functor __pf) : __pmf(__pf) { }
// Handle objects
_Res
@ -361,7 +361,7 @@ template<typename _Res, typename _Class _GLIBCXX_COMMA_SHIFTED
public:
typedef _Res result_type;
explicit _Mem_fn(_Functor __pmf) : __pmf(__pmf) { }
explicit _Mem_fn(_Functor __pf) : __pmf(__pf) { }
// Handle objects
_Res

View File

@ -1,6 +1,6 @@
// new abi support -*- C++ -*-
// Copyright (C) 2000, 2002, 2003, 2004 Free Software Foundation, Inc.
// Copyright (C) 2000, 2002, 2003, 2004, 2006 Free Software Foundation, Inc.
//
// This file is part of GCC.
//
@ -54,12 +54,12 @@
#ifdef __cplusplus
namespace __cxxabiv1
{
typedef __cxa_cdtor_return_type (*__cxa_cdtor_type)(void *);
extern "C"
{
#endif
typedef __cxa_cdtor_return_type (*__cxa_cdtor_type)(void *);
// Allocate array.
void*
__cxa_vec_new(size_t __element_count, size_t __element_size,

View File

@ -0,0 +1,44 @@
// Copyright (C) 2006 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library 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.
// This library 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 this library; see the file COPYING. If not, write to the Free
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
// USA.
#include <sstream>
#include <testsuite_hooks.h>
// libstdc++/29354
void test01()
{
bool test __attribute__((unused)) = true;
using namespace std;
typedef stringbuf::pos_type pos_type;
typedef stringbuf::off_type off_type;
stringbuf strb_01(ios_base::out);
pos_type pt_1 = strb_01.pubseekoff(0, ios_base::cur, ios_base::out);
VERIFY( pt_1 == pos_type(off_type(0)) );
pos_type pt_2 = strb_01.pubseekpos(pt_1, ios_base::out);
VERIFY( pt_2 == pos_type(off_type(0)) );
}
int
main()
{
test01();
return 0;
}

View File

@ -0,0 +1,44 @@
// Copyright (C) 2006 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library 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.
// This library 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 this library; see the file COPYING. If not, write to the Free
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
// USA.
#include <sstream>
#include <testsuite_hooks.h>
// libstdc++/29354
void test01()
{
bool test __attribute__((unused)) = true;
using namespace std;
typedef stringbuf::pos_type pos_type;
typedef stringbuf::off_type off_type;
wstringbuf strb_01(ios_base::out);
pos_type pt_1 = strb_01.pubseekoff(0, ios_base::cur, ios_base::out);
VERIFY( pt_1 == pos_type(off_type(0)) );
pos_type pt_2 = strb_01.pubseekpos(pt_1, ios_base::out);
VERIFY( pt_2 == pos_type(off_type(0)) );
}
int
main()
{
test01();
return 0;
}