From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 23545 invoked by alias); 4 Aug 2009 03:20:34 -0000 Received: (qmail 23524 invoked by uid 22791); 4 Aug 2009 03:20:29 -0000 X-SWARE-Spam-Status: No, hits=-1.1 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_41,J_CHICKENPOX_53,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mail-px0-f194.google.com (HELO mail-px0-f194.google.com) (209.85.216.194) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 04 Aug 2009 03:20:18 +0000 Received: by pxi32 with SMTP id 32so2465109pxi.24 for ; Mon, 03 Aug 2009 20:20:16 -0700 (PDT) MIME-Version: 1.0 Received: by 10.142.251.15 with SMTP id y15mr190539wfh.50.1249356016456; Mon, 03 Aug 2009 20:20:16 -0700 (PDT) In-Reply-To: <897101.12299.qm@web112519.mail.gq1.yahoo.com> References: <897101.12299.qm@web112519.mail.gq1.yahoo.com> From: Hui Zhu Date: Tue, 04 Aug 2009 03:20:00 -0000 Message-ID: Subject: Re: final i386.floating.record.patch To: paawan oza Cc: Michael Snyder , "gdb-patches@sourceware.org" Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-08/txt/msg00038.txt.bz2 Hi Paawan, Thanks for your work. I do a some test works with the test code that you sent in before. I get the values of fp reg with command "info all-registers". It looks like some fp reg's values not right in replay mode. In record mode they are: fctrl 0x37f 895 fstat 0x0 0 ftag 0xffff 65535 fiseg 0x0 0 fioff 0x0 0 ---Type to continue, or q to quit--- foseg 0x0 0 fooff 0x0 0 fop 0x0 0 In replay mode they are: fctrl 0x37f 895 fstat 0x6069 24681 ftag 0x557f 21887 fiseg 0x73 115 fioff 0x8048bfd 134515709 ---Type to continue, or q to quit--- foseg 0x7b 123 fooff 0x0 0 fop 0x2e9 745 Thanks, Hui #include #include #include /* the test intends to test following insns. flds faddp fstps fstpl fldl fxch fabs fdivrp fmulp fsubrp fucomp fnstsw fsq= rt fchs f2xm1 fyl2x fxtract fprem1 fld fdecstp fld1 fldl2t fldl2e FLDPI FLDLG2 FLDLN2 FLDZ fincstp ffree fptan fpatan fincstp fsincos frndint fscale fsin fcos fc= movb fcmovbe fcmove fcmovu fcmovnb fcmovnbe fsave frstor fstsw */ float no1,no2,no3,no4,no5,no6,no7; double x =3D 100.345, y =3D 25.7789; long double ldx =3D 88888888888888888888.88, ldy =3D 9999999999999999999.99; float result,resultd,resultld; float *float_memory; /* initialization of floats */ void init_floats() { no1 =3D 10.45; no2 =3D 20.77; no3 =3D 156.89874646; no4 =3D 14.56; no5 =3D 11.11; no6 =3D 66.77; no7 =3D 88.88; float_memory =3D malloc(sizeof(float) * 4); *float_memory =3D 256.256; *(float_memory + 1) =3D 356.356; *(float_memory + 2) =3D 456.456; *(float_memory + 3) =3D 556.556; } /* marks FPU stack as empty */ void empty_fpu_stack() { asm ("ffree %st(1) \n\t" "ffree %st(2) \n\t" "ffree %st(3) \n\t" "ffree %st(4) \n\t" "ffree %st(5) \n\t" "ffree %st(6) \n\t" "ffree %st(7)"); } /* tests floating point arithmatic */ void test_arith_floats() { result =3D no1 + no2 + no3 + no4 + no5 + no6 + no7; printf("result is %f\n",result); result =3D fmodf(no2,no1); printf("result is %f\n",result); resultd =3D fmod(x,y); printf("result is %f\n",resultd); resultld =3D fmodl(ldy,ldy); printf("result is %f\n",resultld); result =3D fabsf(no1); printf("result is %f\n",result); result =3D no3 / no4; printf("result is %f\n",result); result =3D no1 * no2 * no3 * no4; printf("result is %f\n",result); result =3D no1 - no2 - no3 - no4; printf("result is %f\n",result); asm ("fld %0" : :"m"(*float_memory)); asm ("fchs"); /* test for f2xm1 */ asm ("fld %0" : :"m"(*float_memory)); asm ("f2xm1"); asm ("fyl2x"); asm ("fld %0" : :"m"(*float_memory)); asm ("fxtract"); asm ("fld %0" : :"m"(*float_memory)); asm ("fprem1"); /* decrement fpu stack pointer only status register should get affected */ asm ("fld %0" : :"m"(*float_memory)); empty_fpu_stack(); asm ("fld1"); asm ("fldl2t"); asm ("fldl2e"); asm ("fldpi"); asm ("fldlg2"); asm ("fldln2"); asm ("fldz"); empty_fpu_stack(); /* finishing emptying the stack */ result =3D sqrt(no3); printf("result is %f\n",result); } void test_log_exp_floats() { result =3D log10(no3); printf("result is %f\n",result); result =3D log(no3); printf("result is %f\n",result); result =3D exp10(no3); printf("result is %f\n",result); result =3D exp(no3); printf("result is %f\n",result); } void test_trigo_floats() { result =3D sin(30); printf("result is %f\n",result); result =3D cos(30); printf("result is %f\n",result); result =3D tan(30); printf("result is %f\n",result); result =3D atan(30); printf("result is %f\n",result); asm ("fld %0" : :"m"(*float_memory)); asm ("fptan"); /* changes st1 and popping register stack */ asm ("fpatan"); asm("fincstp"); asm ("fld %0" : :"m"(float_memory)); asm ("fsincos"); asm ("fld %0" : :"m"(*float_memory)); asm ("frndint"); asm ("fld %0" : :"m"(*float_memory)); asm ("fld %0" : :"m"(*(float_memory+1))); asm ("fscale"); empty_fpu_stack(); asm ("fld %0" : :"m"(*float_memory)); asm ("fsin"); asm ("fcos"); /* currently we assume condition likely and always record the registers code could be optimized only if the flag is set then record */ asm ("fld %0" : :"m"(*float_memory)); asm ("fld %0" : :"m"(*(float_memory+1))); asm ("fcmovb %st(1), %st"); asm ("fcmovbe %st(1), %st"); asm ("fcmove %st(1), %st"); asm ("fcmovu %st(1), %st"); asm ("fcmovnb %st(1), %st"); asm ("fcmovnbe %st(1), %st"); empty_fpu_stack(); /* finished emtyping the stack */ } void test_compare_floats() { ldy =3D 88888888888888888888.88; if (ldx =3D=3D ldy) ldy =3D 7777777777777777777777777777.777; else ldy =3D 666666666666666666666666666.666; } /* test loading and saving of FPU environment */ void test_fpu_env() { asm ("fsave %0" : "=3Dm"(*float_memory) : ); asm ("frstor %0" : : "m"(*float_memory)); asm ("fstsw %ax"); } int main() { init_floats(); test_arith_floats(); test_log_exp_floats(); test_trigo_floats(); test_compare_floats(); test_fpu_env(); } On Mon, Aug 3, 2009 at 22:56, paawan oza wrote: > Hi, > > please find the patch attached. I have attached as per your suggestion. > I am attaching it from opera browser. > > Regards, > Oza. > > --- On Thu, 7/30/09, Michael Snyder wrote: > >> From: Michael Snyder >> Subject: Re: final =A0 i386.floating.record.patch >> To: "paawan oza" >> Cc: "gdb-patches@sourceware.org" >> Date: Thursday, July 30, 2009, 11:31 PM >> paawan oza wrote: >> > Hi, >> > >> > please find my answers below. >> > >> >=A0 1) Are you using a Windows machine to send your >> >=A0 emails?=A0 If so, >> >=A0 is it possible that there is a Unix/Linux >> machine you could >> >=A0 try >> >=A0 sending from?=A0 Your attachments look OK for >> me, but >> >=A0 some people >> >=A0 seem to have had problems with them. >> > >> > Oza : I used to send all from windows till now. >> > but this patch I sent it from Linux...from opera. >> >=A0=A0=A02) And are you using cut-and-paste to >> insert the patches >> >=A0 into the >> >=A0 body of your email?=A0 That would certainly >> cause >> >=A0 problems, because >> >=A0 tabs might be changed into spaces (which is >> exactly what >> >=A0 was >> >=A0 causing patch to fail for me today). >> >=A0 Oza: yes I am using copy-paste....I dont know >> any-other way. >> > because attachmenet are not welcome, so I am not sure >> how I could proceed with this. >> >> It's not that attachments are not welcome. >> There are various binary encodings for attachments, and >> some of those binary encodings are not welcome.=A0 I >> think >> because there's no open-source way of decoding them. >> >> If you look at the list, you'll see that attachments are >> used a lot. >> >> Copy-and-paste, though, in general will not work, because >> it >> usually changes tabs into spaces, which ruins a patch. >> >> >> > I will send you updated patch.....may be I might have >> mistaken of old gdb file. sorry for incovenience. >> >> I think it was just the tabs-to-spaces issue. >> Why don't you try sending an attachment from Opera? >> >> > > >