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:
parent
b738ee7f82
commit
86e81e1a09
|
@ -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))
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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} \
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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) \
|
||||
{ \
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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 */
|
||||
|
||||
|
|
|
@ -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" "")
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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))]
|
||||
""
|
||||
|
|
|
@ -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:
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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>")])
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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} \
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
})
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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 "Có « #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 "dù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"
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
44
gnu/dist/gcc4/libstdc++-v3/testsuite/27_io/basic_stringbuf/seekpos/char/29354.cc
vendored
Normal file
44
gnu/dist/gcc4/libstdc++-v3/testsuite/27_io/basic_stringbuf/seekpos/char/29354.cc
vendored
Normal 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;
|
||||
}
|
44
gnu/dist/gcc4/libstdc++-v3/testsuite/27_io/basic_stringbuf/seekpos/wchar_t/29354.cc
vendored
Normal file
44
gnu/dist/gcc4/libstdc++-v3/testsuite/27_io/basic_stringbuf/seekpos/wchar_t/29354.cc
vendored
Normal 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;
|
||||
}
|
Loading…
Reference in New Issue