Hi all, Can gatekeeper help review bug943, http://bugs.open64.net/show_bug.cgi?id=943. thanks.
Bug943 is the regression caused by r3875.
The common place of all failed cases are:
from the ouput .s file, there are following piece of code:
sete %bl #
movl %ebx,%eax #
That is a movl after "sete", the right form should be "movzbl %bl,%eax"
The checkin code of r3857 is as follows, it uses Exp_COPY instead of
Exp_COPY_Ext when size>2. But for instruction like "sete" it doesn't clear the
upper bits, obviously r3857 break the orignal fix for bug5621.
Modified: trunk/osprey/be/cg/lra.cxx
===================================================================
--- trunk/osprey/be/cg/lra.cxx 2011-12-26 08:44:54 UTC (rev 3856)
+++ trunk/osprey/be/cg/lra.cxx 2012-01-13 05:43:31 UTC (rev 3857)
@@ -5518,10 +5518,38 @@
Set_OP_opnd( op, opnd_idx, result );
} else {
+ if (TN_size(result) > 2)
+ Exp_COPY( opnd, result, &ops );
+ else
// Do sign/zero extend instead of regular copy. Needed for "sete" which
// doesn't clear the upper bits. Bug 5621.
- Exp_COPY_Ext(TN_size(result) == 2 ? TOP_movzwl : TOP_movzbl,
- opnd, result, &ops );
+ Exp_COPY_Ext(TN_size(result) == 2 ? TOP_movzwl : TOP_movzbl,
+ opnd, result, &ops );
+
...
But the code Exp_COPY should not delte, for follwing case:
int main()
{
int inc = 0xFF;
asm volatile (
"add $1, %0\n\t"
: "+Q" (inc)
:
);
printf("inc=%d\n",inc);
}
if we use Exp_COPY_Ext to generate result, it will use TOP_movzbl to
store back the result, that will clear the upper 3 byte to 0.
To fix the problem, that do not break the two condition. I put the
code "Exp_COPY( opnd, result, &ops );" into inline asm condition.
The patch is attached.
Thanks
zhuqing
bug943.patch
Description: Binary data
------------------------------------------------------------------------------ Keep Your Developer Skills Current with LearnDevNow! The most comprehensive online learning library for Microsoft developers is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3, Metro Style Apps, more. Free future releases when you subscribe now! http://p.sf.net/sfu/learndevnow-d2d
_______________________________________________ Open64-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/open64-devel
