[Commit] nickle ChangeLog,1.87,1.88 value.c,1.47,1.48

Keith Packard commit at keithp.com
Sat Oct 9 15:38:31 PDT 2004


Committed by: keithp

Update of /local/src/CVS/nickle
In directory home.keithp.com:/tmp/cvs-serv14417

Modified Files:
	ChangeLog value.c 
Log Message:
2004-10-09  Keith Packard  <keithp at keithp.com>

	* value.c: (ShiftL), (ShiftR):
	Optimize shifts of small ints by small ints


Index: ChangeLog
===================================================================
RCS file: /local/src/CVS/nickle/ChangeLog,v
retrieving revision 1.87
retrieving revision 1.88
diff -u -d -r1.87 -r1.88
--- ChangeLog	22 Sep 2004 16:51:30 -0000	1.87
+++ ChangeLog	9 Oct 2004 22:38:28 -0000	1.88
@@ -1,3 +1,8 @@
+2004-10-09  Keith Packard  <keithp at keithp.com>
+
+	* value.c: (ShiftL), (ShiftR):
+	Optimize shifts of small ints by small ints
+
 2004-09-22  Bart Massey  <bart at cs.pdx.edu>
 
 	* gram.y:

Index: value.c
===================================================================
RCS file: /local/src/CVS/nickle/value.c,v
retrieving revision 1.47
retrieving revision 1.48
diff -u -d -r1.47 -r1.48
--- value.c	28 May 2004 01:26:38 -0000	1.47
+++ value.c	9 Oct 2004 22:38:28 -0000	1.48
@@ -429,11 +429,25 @@
     if (ValueIsInt(bv))
     {
 	Sign	sign = Positive;
-	if (Negativep (av))
-	    sign = Negative;
-	av = Reduce (NewInteger (sign,
-				 NaturalLsl (IntegerMag(IntegerRep.promote (av,0)),
-					     ValueInt(bv))));
+	int	b = ValueInt(bv);
+	
+	if (ValueIsInt (av) && b < NICKLE_INT_BITS)
+	{
+	    signed_digit    rd = (signed_digit) ValueInt (av) << b;
+	    
+	    if (rd > (signed_digit) MAX_NICKLE_INT || rd < (signed_digit) MIN_NICKLE_INT)
+		av = NewSignedDigitInteger (rd);
+	    else
+		av = NewInt ((int) rd);
+	}
+	else
+	{
+	    if (Negativep (av))
+		sign = Negative;
+	    av = Reduce (NewInteger (sign,
+				     NaturalLsl (IntegerMag(IntegerRep.promote (av,0)),
+						 ValueInt(bv))));
+	}
     }
     else
     {
@@ -460,14 +474,23 @@
     if (ValueIsInt(bv))
     {
 	Sign	sign = Positive;
-	if (Negativep (av))
+	int	b = ValueInt(bv);
+	
+	if (ValueIsInt (av) && b < NICKLE_INT_BITS)
 	{
-	    av = Minus (av, Minus (ShiftL (One, bv), One));
-	    sign = Negative;
+	    av = NewInt (ValueInt (av) >> b);
+	}
+	else
+	{
+	    if (Negativep (av))
+	    {
+		av = Minus (av, Minus (ShiftL (One, bv), One));
+		sign = Negative;
+	    }
+	    av = Reduce (NewInteger (sign,
+				     NaturalRsl (IntegerMag(IntegerRep.promote (av,0)),
+						 b)));
 	}
-	av = Reduce (NewInteger (sign,
-				 NaturalRsl (IntegerMag(IntegerRep.promote (av,0)),
-					     ValueInt(bv))));
     }
     else
     {




More information about the Commit mailing list