regression in fp constants

Mikey jeffdbREMOVETHIS@goodnet.com
Wed Jun 23 14:15:00 GMT 1999


This worked correctly in egcs-1.2.1

affects all x86 targets with 80387 and LONG_DOUBLE_TYPE_SIZE == 64?

related to changes in i386.md around 3/28/99?

compiling libgcc2.a

_fixunssfsi
_fixunsdfdi
    0       0 [main] D:\USR\SRC\OBJ\GCC\CC1.EXE 1333 handle_exceptions: Exception: STATUS_ACCESS_VIOLATION
/tmp\cc6Qaaaa.s: Assembler messages:
/tmp\cc6Qaaaa.s:0: Warning: end of file in string: inserted '"'
/tmp\cc6Qaaaa.s:76: Warning: .stabs: Missing comma
_fixdfdi
_fixunssfdi
    0       0 [main] D:\USR\SRC\OBJ\GCC\CC1.EXE 1347 handle_exceptions: Exception: STATUS_ACCESS_VIOLATION
/tmp\ccyRaaaa.s: Assembler messages:
/tmp\ccyRaaaa.s:0: Warning: end of file in string: inserted '"'
/tmp\ccyRaaaa.s:76: Warning: .stabs: Missing comma
_fixsfdi
_fixxfdi

adding -mno-80387 to ./specs works around this error
but is, I think, a less than optimal solution.-)

an XFmode node is being generated in expand_float()
with no type to represent it since long_double_type_node == DFmode

Reading symbols from /USR/SRC/OBJ/GCC/CC1.EXE...done.
0x4860ef in force_const_mem (mode=XFmode, x=0x29fff08)
    at /usr/src/src/gcc/varasm.c:3462
3462          align = CONSTANT_ALIGNMENT (make_tree (type_for_mode (mode, 0), x)

(gdb) bt
#0  0x4860ef in force_const_mem (mode=XFmode, x=0x29fff08)
    at /usr/src/src/gcc/varasm.c:3462
#1  0x44dc3f in emit_move_insn (x=0x29fff20, y=0x29fff08)
    at /usr/src/src/gcc/expr.c:2532
#2  0x4743e4 in copy_to_mode_reg (mode=XFmode, x=0x29fff08)
    at /usr/src/src/gcc/explow.c:670
#3  0x475a60 in expand_binop (mode=XFmode, binoptab=0x29e0450, op0=0x29ffba0,
    op1=0x29fff08, target=0x29ffba0, unsignedp=0, methods=OPTAB_LIB_WIDEN)
    at /usr/src/src/gcc/optabs.c:497
#4  0x47c4ee in expand_float (to=0x29ffb68, from=0x29d59d8, unsignedp=1)
    at /usr/src/src/gcc/optabs.c:3712
#5  0x45ae9e in expand_expr (exp=0x29d40a0, target=0x29ffb68, tmode=VOIDmode,
    modifier=EXPAND_NORMAL) at /usr/src/src/gcc/expr.c:7185
#6  0x45eddb in expand_expr (exp=0x29d40d0, target=0x29d57e8, tmode=DFmode,
    modifier=EXPAND_NORMAL) at /usr/src/src/gcc/expr.c:8159
#7  0x4503af in store_expr (exp=0x29d40d0, target=0x29d57e8, want_value=0)
    at /usr/src/src/gcc/expr.c:3638
#8  0x44ff4f in expand_assignment (to=0x29d5780, from=0x29d40d0, want_value=0,
    suggest_reg=1) at /usr/src/src/gcc/expr.c:3475
#9  0x45de1a in expand_expr (exp=0x29d40f0, target=0x0, tmode=VOIDmode,
    modifier=EXPAND_NORMAL) at /usr/src/src/gcc/expr.c:7872
#10 0x43e19c in expand_expr_stmt (exp=0x29d40f0)
    at /usr/src/src/gcc/stmt.c:1695
#11 0x627c0f in expand_stmt_with_iterators_1 (stmt=0x29d40f0, iter_list=0x0)
    at /usr/src/src/gcc/c-iterate.c:167
#12 0x627bee in iterator_expand (stmt=0x29d40f0)
    at /usr/src/src/gcc/c-iterate.c:157
#13 0x5fa207 in yyparse () at c-parse.y:1700
#14 0x40677a in compile_file (name=0x29bfd9a "/tmp\\ccrHaaaa.i")
    at /usr/src/src/gcc/toplev.c:3019
#15 0x40b535 in main (argc=12, argv=0x29d1060)
    at /usr/src/src/gcc/toplev.c:5354

(gdb) print long_double_type_node->type
$4 = {common = "\000\000\000\000\000\000\000\000\b\000\000\000\004\000\000",
  values = 0x0, size = 0x29d2a28, size_unit = 0x29d2a48, attributes = 0x0,
  uid = 27, precision = 64 '@', mode = DFmode, string_flag = 0,
  no_force_blk_flag = 0, needs_constructing_flag = 0,
  transparent_union_flag = 0, packed_flag = 0, restrict_flag = 0,
  lang_flag_0 = 0, lang_flag_1 = 0, lang_flag_2 = 0, lang_flag_3 = 0,
  lang_flag_4 = 0, lang_flag_5 = 0, lang_flag_6 = 0, align = 64,
  pointer_to = 0x0, reference_to = 0x0, symtab = {address = 14,
    pointer = 0xe "p"}, name = 0x29d8970, minval = 0x0, maxval = 0x0,
  next_variant = 0x0, main_variant = 0x29d88c8, binfo = 0x0,
  noncopied_parts = 0x0, context = 0x0, obstack = 0x635250, alias_set = -1,
  lang_specific = 0x0}

Sorry that's as far as I know how to get ;-)


More information about the Gcc-bugs mailing list