Re: Abt long long support

2006-11-13 Thread Mohamed Shafi
I'm really shooting in the dark here, but my guess is that you have a define_expand for movdi that is not reload safe. You can do this operation correctly, you just have to reverse the instructions: load a5 from (a4 + 4) before you load a4 from (a4). See, e.g., mips_split_64bit_move in mips.c

RE: Abt long long support

2006-11-13 Thread Dave Korn
On 13 November 2006 12:27, Mohamed Shafi wrote: (insn 94 91 95 6 (set (reg:SI 12 a4) (mem/c:SI (reg:SI 12 a4) [0 D.1863+0 S4 A32])) 15 {movsi_load} (nil) (nil)) (insn 95 94 31 6 (set (reg:SI 13 a5 [orig:12+4 ] [12]) (mem/c:SI (plus:SI (reg:SI 12 a4)

RE: Abt long long support

2006-11-13 Thread Dave Korn
On 13 November 2006 12:37, Dave Korn wrote: You *must* implement a movdi expander, and it has to be clever enough to notice when one of the output registers is going to clobber one of the input operands and emit the two SImode halves of the move in the opposite order. Take a look at,

Re: Abt long long support

2006-11-12 Thread Mohamed Shafi
First thanks very much for your thoughts If those two instructions appear for the first time in the .greg dump file, then they have been created by reload. Yes they appear for the first time in .greg dump file. 1. What could be the reason for this behavior? I'm really shooting in the

RE: Abt long long support

2006-11-12 Thread Dave Korn
On 10 November 2006 22:31, 'Rask Ingemann Lambertsen' wrote: On Fri, Nov 10, 2006 at 07:11:34PM -, Dave Korn wrote: No, surely you don't want to do that! You really need a movdi pattern - even more so if there are no natural DImode-sized registers, as gcse can get terribly confused

Re: Abt long long support

2006-11-10 Thread Mohamed Shafi
On 11/10/06, Mike Stump [EMAIL PROTECTED] wrote: On Nov 9, 2006, at 6:39 AM, Mohamed Shafi wrote: When i diff the rtl dumps for programs passing negative value with and without frame pointer i find changes from file.greg . A quick glance at the rtl shows that insn 95 tries to use [a4+4] but

Re: Abt long long support

2006-11-10 Thread Ian Lance Taylor
Mohamed Shafi [EMAIL PROTECTED] writes: (insn 94 91 95 6 (set (reg:SI 12 a4) (mem/c:SI (reg:SI 12 a4) [0 D.1863+0 S4 A32])) 15 {movsi_load} (nil) (nil)) (insn 95 94 31 6 (set (reg:SI 13 a5 [orig:12+4 ] [12]) (mem/c:SI (plus:SI (reg:SI 12 a4) (const_int

Re: Abt long long support

2006-11-10 Thread Rask Ingemann Lambertsen
On Thu, Nov 09, 2006 at 11:52:02AM -0800, Mike Stump wrote: The way the instructions are numbered suggests that the code went wrong before this point. You have to read and understand all the dumps, whether they are right or wrong and why, track down the code in the compiler that is

Re: Abt long long support

2006-11-10 Thread Rask Ingemann Lambertsen
On Fri, Nov 10, 2006 at 07:17:29AM -0800, Ian Lance Taylor wrote: Mohamed Shafi [EMAIL PROTECTED] writes: 1. What could be the reason for this behavior? I'm really shooting in the dark here, but my guess is that you have a define_expand for movdi that is not reload safe. And in case

RE: Abt long long support

2006-11-10 Thread Dave Korn
On 10 November 2006 17:55, Rask Ingemann Lambertsen wrote: On Fri, Nov 10, 2006 at 07:17:29AM -0800, Ian Lance Taylor wrote: Mohamed Shafi [EMAIL PROTECTED] writes: 1. What could be the reason for this behavior? I'm really shooting in the dark here, but my guess is that you have a

Re: Abt long long support

2006-11-10 Thread 'Rask Ingemann Lambertsen'
On Fri, Nov 10, 2006 at 07:11:34PM -, Dave Korn wrote: No, surely you don't want to do that! You really need a movdi pattern - even more so if there are no natural DImode-sized registers, as gcse can get terribly confused by bad reg_equal notes if you don't. See e.g.:

Re: Abt long long support

2006-11-09 Thread Mohamed Shafi
On 11/7/06, Mike Stump [EMAIL PROTECTED] wrote: On Nov 6, 2006, at 9:30 PM, Mohamed Shafi wrote: My target (non gcc/private one) fails for long long testcases Does it work flawlessly otherwise, if not, fix all those problems first. After those are all fixed, then you can see if it then just

Re: Abt long long support

2006-11-09 Thread Mike Stump
On Nov 9, 2006, at 6:39 AM, Mohamed Shafi wrote: When i diff the rtl dumps for programs passing negative value with and without frame pointer i find changes from file.greg . And, is that change bad? We do expect changes in codegen, you didn't say if those changes are invalid, or what was

Re: Abt long long support

2006-11-09 Thread Mohamed Shafi
Thanks for the input and the questions Did you examine: long long l, k; l = -k; for correctness by itself? Was it valid or invalid? Yes this is working. [ read ahead for spoilers, I'd rather you pull this information out of the dump and present it to us... ] A quick glance at

Re: Abt long long support

2006-11-09 Thread Ian Lance Taylor
Mohamed Shafi [EMAIL PROTECTED] writes: and one more thing. In the dumps i noticed that before using a register in DI mode they are all clobbred first, like (insn 30 54 28 6 (clobber (reg:DI 34)) -1 (nil) (nil)) What is the use of this insns ... Why do we need to clobber these

Re: Abt long long support

2006-11-06 Thread Ian Lance Taylor
Mohamed Shafi [EMAIL PROTECTED] writes: Looking at a .md file of a backend it there a way to know whether a target supports long long gcc always supports long long for all targets. Can you ask a more precise question? Ian

Re: Abt long long support

2006-11-06 Thread Rask Ingemann Lambertsen
On Mon, Nov 06, 2006 at 10:52:00AM +0530, Mohamed Shafi wrote: Hello all, Looking at a .md file of a backend it there a way to know whether a target supports long long Should i look for patterns with machine mode DI? No. For example, 8-bit, 16-bit and 32-bit targets should normally not

Re: Abt long long support

2006-11-06 Thread Mohamed Shafi
Thanks for the reply My target (non gcc/private one) fails for long long testcases and there are cases (with long long) which gets through, but not with the right output. When i replace long long with long the testcases runs fine, even those giving wrong output. The target is not able to compile

Re: Abt long long support

2006-11-06 Thread Ian Lance Taylor
Mohamed Shafi [EMAIL PROTECTED] writes: So when i looked into the .md file i saw no patterns with DI machine mode ,used for long long(am i right?), execpt define_insn adddi3 and define_insn subdi3 The .md file says that this is to prevent gcc from synthesising it, though i didnt

Re: Abt long long support

2006-11-06 Thread Mike Stump
On Nov 6, 2006, at 9:30 PM, Mohamed Shafi wrote: My target (non gcc/private one) fails for long long testcases Does it work flawlessly otherwise, if not, fix all those problems first. After those are all fixed, then you can see if it then just works. In particular, you will want to