This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: PATCH [mainline] Fix for long double (TARGET_LONG_DOUBLE_128) on ppc-darwin



On 30/07/2004, at 4:01 PM, Fariborz Jahanian wrote:



On Jul 30, 2004, at 2:17 PM, Geoffrey Keating wrote:


Fariborz Jahanian <fjahanian@apple.com> writes:

7e.com)

I think the second part of this patch won't work. If you get into rs6000_split_multireg_move with a non-offsettable address, there's no code you can generate. I'll look into this a bit more and come up with a patch.


Second part was added after change in the first part. In the following test case:


static long long foo()
{
  static long long rat;
  return rat;
}

Following pattern is now being generated:

(insn 9 8 10 (set:SI (reg:SI 121)
(plus:SI (reg:SI 31 r31)
(high:SI (const:SI (minus:SI (symbol_ref:SI ("!D__*rat.0") [flags 0x2] <var_decl 0x41757380 rat>)
(symbol_ref:SI ("<pic base>"))))))) -1 (nil)
(nil))


(insn 10 9 11 (set:SI (reg/f:SI 120)
(lo_sum:SI (reg:SI 121)
(const:SI (minus:SI (symbol_ref:SI ("!D__*rat.0") [flags 0x2] <var_decl 0x41757380 rat>)
(symbol_ref:SI ("<pic base>")))))) -1 (nil)
(expr_list:REG_EQUAL (symbol_ref:SI ("!D__*rat.0") [flags 0x2] <var_decl 0x41757380 rat>)
(nil)))

I think you copied-and-pasted the wrong RTL, this RTL and code don't match.


And following code is generated which looks correct to me and works in test case (and bootstrap of gcc):

       addis r2,r10,ha16(rat.0-"L00000000001$pb")
        la r2,lo16(rat.0-"L00000000001$pb")(r2)
        lfd f0,0(r2)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]