[Vm-dev] [commit][3026] CogVM source as per VMMaker.oscog-eem.794
commits at squeakvm.org
commits at squeakvm.org
Wed Jul 2 22:44:20 UTC 2014
Revision: 3026
Author: eliot
Date: 2014-07-02 15:44:11 -0700 (Wed, 02 Jul 2014)
Log Message:
-----------
CogVM source as per VMMaker.oscog-eem.794
Fix the shift for divide issues in the LargeIntegersPlugin. Add code to
generateDivide:on:indent: to spit out checking asserts if required.
Change the SmartSyntaxPluginCodeGenerator to generate
code that ifdefs out the remapOop:in: rigmarole on Spur.
Fix inline cache for Characters in Spur.
Update mksistaarchives for new build structure on Mac (only).
Modified Paths:
--------------
branches/Cog/nsspursrc/vm/cogit.c
branches/Cog/nsspursrc/vm/cogit.h
branches/Cog/nsspursrc/vm/cogmethod.h
branches/Cog/scripts/mksistaarchives
branches/Cog/spursistasrc/vm/cogit.c
branches/Cog/spursistasrc/vm/cogit.h
branches/Cog/spursistasrc/vm/cogmethod.h
branches/Cog/spursrc/vm/cogit.c
branches/Cog/spursrc/vm/cogit.h
branches/Cog/spursrc/vm/cogmethod.h
branches/Cog/src/plugins/LargeIntegers/LargeIntegers.c
Property Changed:
----------------
branches/Cog/platforms/Cross/vm/sqSCCSVersion.h
Modified: branches/Cog/nsspursrc/vm/cogit.c
===================================================================
--- branches/Cog/nsspursrc/vm/cogit.c 2014-07-02 03:12:22 UTC (rev 3025)
+++ branches/Cog/nsspursrc/vm/cogit.c 2014-07-02 22:44:11 UTC (rev 3026)
@@ -1,9 +1,9 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.790 uuid: 1c0587fb-44ad-43f6-8bfd-2a0f91e21a59
+ CCodeGenerator VMMaker.oscog-eem.793 uuid: aa676593-2c7b-4ad7-92a5-9d1e27cb7377
from
- StackToRegisterMappingCogit VMMaker.oscog-eem.790 uuid: 1c0587fb-44ad-43f6-8bfd-2a0f91e21a59
+ StackToRegisterMappingCogit VMMaker.oscog-eem.793 uuid: aa676593-2c7b-4ad7-92a5-9d1e27cb7377
*/
-static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.790 uuid: 1c0587fb-44ad-43f6-8bfd-2a0f91e21a59 " __DATE__ ;
+static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.793 uuid: aa676593-2c7b-4ad7-92a5-9d1e27cb7377 " __DATE__ ;
char *__cogitBuildInfo = __buildInfo;
@@ -18457,7 +18457,7 @@
movl 0(%edx), rDest
andl $0x3fffff, rDest
Lcmp:
- But we expect most SMallInteger arithmetic to be performwd in-line and so
+ But we expect most SmallInteger arithmetic to be performed in-line and so
prefer the
version that is faster for non-immediates (because it branches for
immediates only). */
@@ -18834,13 +18834,9 @@
static sqInt
inlineCacheTagForInstance(sqInt oop)
{
- if (isImmediate(oop)) {
- if ((oop & 1)) {
- return ((0 << 1) | 1);
- }
- return oop & (tagMask());
- }
- return classIndexOf(oop);
+ return (isImmediate(oop)
+ ? oop & 1
+ : classIndexOf(oop));
}
Modified: branches/Cog/nsspursrc/vm/cogit.h
===================================================================
--- branches/Cog/nsspursrc/vm/cogit.h 2014-07-02 03:12:22 UTC (rev 3025)
+++ branches/Cog/nsspursrc/vm/cogit.h 2014-07-02 22:44:11 UTC (rev 3026)
@@ -1,5 +1,5 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.790 uuid: 1c0587fb-44ad-43f6-8bfd-2a0f91e21a59
+ CCodeGenerator VMMaker.oscog-eem.793 uuid: aa676593-2c7b-4ad7-92a5-9d1e27cb7377
*/
Modified: branches/Cog/nsspursrc/vm/cogmethod.h
===================================================================
--- branches/Cog/nsspursrc/vm/cogmethod.h 2014-07-02 03:12:22 UTC (rev 3025)
+++ branches/Cog/nsspursrc/vm/cogmethod.h 2014-07-02 22:44:11 UTC (rev 3026)
@@ -1,5 +1,5 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.790 uuid: 1c0587fb-44ad-43f6-8bfd-2a0f91e21a59
+ CCodeGenerator VMMaker.oscog-eem.793 uuid: aa676593-2c7b-4ad7-92a5-9d1e27cb7377
*/
typedef struct {
Property changes on: branches/Cog/platforms/Cross/vm/sqSCCSVersion.h
___________________________________________________________________
Modified: checkindate
- Tue Jul 1 20:11:53 PDT 2014
+ Wed Jul 2 15:43:04 PDT 2014
Modified: branches/Cog/scripts/mksistaarchives
===================================================================
--- branches/Cog/scripts/mksistaarchives 2014-07-02 03:12:22 UTC (rev 3025)
+++ branches/Cog/scripts/mksistaarchives 2014-07-02 22:44:11 UTC (rev 3026)
@@ -5,7 +5,8 @@
"
cd `dirname $0`/../products
NSB=newspeak.sista.spur
-SQB=squeak.sista.spur
+SQCB=squeak.sista.v3
+SQSB=squeak.sista.spur
if [ $# = 0 ]; then
CL=1
CM=1
@@ -44,6 +45,8 @@
TAG=`date +%g.%U.`$REV
echo REV=$REV TAG=$TAG
if [ -n "$CL" ]; then
+ echo not yet implemented 1>&2
+ exit 1
for archive in sistaspurlinuxht; do
rm -rf $archive-$TAG.tgz
echo $archive '=>' $archive-$TAG.tgz
@@ -52,6 +55,8 @@
done
fi
if [ -n "$NL" ]; then
+ echo not yet implemented 1>&2
+ exit 1
set -- nssistaspurlinuxht
for archive in nsvmspurlinuxht; do
rm -rf $archive-$TAG.tgz
@@ -63,22 +68,39 @@
fi
if [ -n "$CM" ]; then
set -- Fast.app
+ for app in Sista.app; do
+ test -d $app || mkdir $app
+ if [ -d ../build.macos32x86/$SQCB/$1 ]; then
+ rm -rf $app/* $app-$TAG.tgz
+ echo build.macos32x86/$SQCB/$1 '=>' $app '=>' $app-$TAG.tgz
+ (cd ../build.macos32x86/$SQCB/$1 >/dev/null;tar cf - *) \
+ | (cd $app;tar xf -)
+ tar czf $app-$TAG.tgz $app
+ EXES="$EXES $app/Contents/MacOS/Squeak"
+ else
+ echo build.macos32x86/$SQCB/$1 is missing
+ fi
+ shift
+ done
+ set -- Fast.app
for app in SistaSpur.app; do
test -d $app || mkdir $app
- if [ -d ../build.macos32x86/$SQB/$1 ]; then
+ if [ -d ../build.macos32x86/$SQSB/$1 ]; then
rm -rf $app/* $app-$TAG.tgz
- echo build.macos32x86/$SQB/$1 '=>' $app '=>' $app-$TAG.tgz
- (cd ../build.macos32x86/$SQB/$1 >/dev/null;tar cf - *) \
+ echo build.macos32x86/$SQSB/$1 '=>' $app '=>' $app-$TAG.tgz
+ (cd ../build.macos32x86/$SQSB/$1 >/dev/null;tar cf - *) \
| (cd $app;tar xf -)
tar czf $app-$TAG.tgz $app
EXES="$EXES $app/Contents/MacOS/Squeak"
else
- echo build.macos32x86/$SQB/$1 is missing
+ echo build.macos32x86/$SQSB/$1 is missing
fi
shift
done
fi
if [ -n "$NM" ]; then
+ echo not yet implemented 1>&2
+ exit 1
set -- Fast.app
for app in Newspeak\ Spur\ Virtual\ Machine.app; do
test -d $app || mkdir $app
@@ -96,25 +118,29 @@
done
fi
if [ -n "$CW" ]; then
+ echo not yet implemented 1>&2
+ exit 1
set -- build/vm
for dir in sistaspurwin; do
test -d $dir || mkdir $dir
- if [ -d ../build.win32x86/$SQB/$1 ]; then
+ if [ -d ../build.win32x86/$SQSB/$1 ]; then
rm -rf $dir/* $dir-$TAG.zip
- echo build.win32x86/$SQB/$1 '=>' $dir '=>' $dir-$TAG.zip
- (cd ../build.win32x86/$SQB/$1 >/dev/null; \
+ echo build.win32x86/$SQSB/$1 '=>' $dir '=>' $dir-$TAG.zip
+ (cd ../build.win32x86/$SQSB/$1 >/dev/null; \
tar cf - Squeak.exe Squeak.map Squeak.exe.manifest \
SqueakConsole.exe SqueakConsole.map *.dll) \
| (cd $dir;tar xf -)
zip -qr $dir-$TAG.zip $dir
EXES="$EXES $dir/Squeak.exe $dir/SqueakConsole.exe"
else
- echo build.win32x86/$SQB/$1 is missing
+ echo build.win32x86/$SQSB/$1 is missing
fi
shift
done
fi
if [ -n "$NW" ]; then
+ echo not yet implemented 1>&2
+ exit 1
set -- build/vm
for dir in nsvmspurwin; do
test -d $dir || mkdir $dir
Modified: branches/Cog/spursistasrc/vm/cogit.c
===================================================================
--- branches/Cog/spursistasrc/vm/cogit.c 2014-07-02 03:12:22 UTC (rev 3025)
+++ branches/Cog/spursistasrc/vm/cogit.c 2014-07-02 22:44:11 UTC (rev 3026)
@@ -1,9 +1,9 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.792 uuid: 9d8d23c8-c855-48a6-8bdd-402765c01a99
+ CCodeGenerator VMMaker.oscog-eem.793 uuid: aa676593-2c7b-4ad7-92a5-9d1e27cb7377
from
- SistaStackToRegisterMappingCogit VMMaker.oscog-eem.792 uuid: 9d8d23c8-c855-48a6-8bdd-402765c01a99
+ SistaStackToRegisterMappingCogit VMMaker.oscog-eem.793 uuid: aa676593-2c7b-4ad7-92a5-9d1e27cb7377
*/
-static char __buildInfo[] = "SistaStackToRegisterMappingCogit VMMaker.oscog-eem.792 uuid: 9d8d23c8-c855-48a6-8bdd-402765c01a99 " __DATE__ ;
+static char __buildInfo[] = "SistaStackToRegisterMappingCogit VMMaker.oscog-eem.793 uuid: aa676593-2c7b-4ad7-92a5-9d1e27cb7377 " __DATE__ ;
char *__cogitBuildInfo = __buildInfo;
@@ -16895,7 +16895,7 @@
movl 0(%edx), rDest
andl $0x3fffff, rDest
Lcmp:
- But we expect most SMallInteger arithmetic to be performwd in-line and so
+ But we expect most SmallInteger arithmetic to be performed in-line and so
prefer the
version that is faster for non-immediates (because it branches for
immediates only). */
@@ -17288,13 +17288,9 @@
static sqInt
inlineCacheTagForInstance(sqInt oop)
{
- if (isImmediate(oop)) {
- if ((oop & 1)) {
- return ((0 << 1) | 1);
- }
- return oop & (tagMask());
- }
- return classIndexOf(oop);
+ return (isImmediate(oop)
+ ? oop & 1
+ : classIndexOf(oop));
}
Modified: branches/Cog/spursistasrc/vm/cogit.h
===================================================================
--- branches/Cog/spursistasrc/vm/cogit.h 2014-07-02 03:12:22 UTC (rev 3025)
+++ branches/Cog/spursistasrc/vm/cogit.h 2014-07-02 22:44:11 UTC (rev 3026)
@@ -1,5 +1,5 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.792 uuid: 9d8d23c8-c855-48a6-8bdd-402765c01a99
+ CCodeGenerator VMMaker.oscog-eem.793 uuid: aa676593-2c7b-4ad7-92a5-9d1e27cb7377
*/
Modified: branches/Cog/spursistasrc/vm/cogmethod.h
===================================================================
--- branches/Cog/spursistasrc/vm/cogmethod.h 2014-07-02 03:12:22 UTC (rev 3025)
+++ branches/Cog/spursistasrc/vm/cogmethod.h 2014-07-02 22:44:11 UTC (rev 3026)
@@ -1,5 +1,5 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.792 uuid: 9d8d23c8-c855-48a6-8bdd-402765c01a99
+ CCodeGenerator VMMaker.oscog-eem.793 uuid: aa676593-2c7b-4ad7-92a5-9d1e27cb7377
*/
typedef struct {
Modified: branches/Cog/spursrc/vm/cogit.c
===================================================================
--- branches/Cog/spursrc/vm/cogit.c 2014-07-02 03:12:22 UTC (rev 3025)
+++ branches/Cog/spursrc/vm/cogit.c 2014-07-02 22:44:11 UTC (rev 3026)
@@ -1,9 +1,9 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.790 uuid: 1c0587fb-44ad-43f6-8bfd-2a0f91e21a59
+ CCodeGenerator VMMaker.oscog-eem.793 uuid: aa676593-2c7b-4ad7-92a5-9d1e27cb7377
from
- StackToRegisterMappingCogit VMMaker.oscog-eem.790 uuid: 1c0587fb-44ad-43f6-8bfd-2a0f91e21a59
+ StackToRegisterMappingCogit VMMaker.oscog-eem.793 uuid: aa676593-2c7b-4ad7-92a5-9d1e27cb7377
*/
-static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.790 uuid: 1c0587fb-44ad-43f6-8bfd-2a0f91e21a59 " __DATE__ ;
+static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.793 uuid: aa676593-2c7b-4ad7-92a5-9d1e27cb7377 " __DATE__ ;
char *__cogitBuildInfo = __buildInfo;
@@ -16805,7 +16805,7 @@
movl 0(%edx), rDest
andl $0x3fffff, rDest
Lcmp:
- But we expect most SMallInteger arithmetic to be performwd in-line and so
+ But we expect most SmallInteger arithmetic to be performed in-line and so
prefer the
version that is faster for non-immediates (because it branches for
immediates only). */
@@ -17175,13 +17175,9 @@
static sqInt
inlineCacheTagForInstance(sqInt oop)
{
- if (isImmediate(oop)) {
- if ((oop & 1)) {
- return ((0 << 1) | 1);
- }
- return oop & (tagMask());
- }
- return classIndexOf(oop);
+ return (isImmediate(oop)
+ ? oop & 1
+ : classIndexOf(oop));
}
Modified: branches/Cog/spursrc/vm/cogit.h
===================================================================
--- branches/Cog/spursrc/vm/cogit.h 2014-07-02 03:12:22 UTC (rev 3025)
+++ branches/Cog/spursrc/vm/cogit.h 2014-07-02 22:44:11 UTC (rev 3026)
@@ -1,5 +1,5 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.790 uuid: 1c0587fb-44ad-43f6-8bfd-2a0f91e21a59
+ CCodeGenerator VMMaker.oscog-eem.793 uuid: aa676593-2c7b-4ad7-92a5-9d1e27cb7377
*/
Modified: branches/Cog/spursrc/vm/cogmethod.h
===================================================================
--- branches/Cog/spursrc/vm/cogmethod.h 2014-07-02 03:12:22 UTC (rev 3025)
+++ branches/Cog/spursrc/vm/cogmethod.h 2014-07-02 22:44:11 UTC (rev 3026)
@@ -1,5 +1,5 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.790 uuid: 1c0587fb-44ad-43f6-8bfd-2a0f91e21a59
+ CCodeGenerator VMMaker.oscog-eem.793 uuid: aa676593-2c7b-4ad7-92a5-9d1e27cb7377
*/
typedef struct {
Modified: branches/Cog/src/plugins/LargeIntegers/LargeIntegers.c
===================================================================
--- branches/Cog/src/plugins/LargeIntegers/LargeIntegers.c 2014-07-02 03:12:22 UTC (rev 3025)
+++ branches/Cog/src/plugins/LargeIntegers/LargeIntegers.c 2014-07-02 22:44:11 UTC (rev 3026)
@@ -1,9 +1,9 @@
/* Automatically generated by
- SmartSyntaxPluginCodeGenerator VMMaker.oscog-eem.790 uuid: 1c0587fb-44ad-43f6-8bfd-2a0f91e21a59
+ SmartSyntaxPluginCodeGenerator VMMaker.oscog-eem.794 uuid: 7fd23b24-d4aa-4291-996a-760b99e0d7e2
from
- LargeIntegersPlugin VMMaker.oscog-eem.790 uuid: 1c0587fb-44ad-43f6-8bfd-2a0f91e21a59
+ LargeIntegersPlugin VMMaker.oscog-eem.794 uuid: 7fd23b24-d4aa-4291-996a-760b99e0d7e2
*/
-static char __buildInfo[] = "LargeIntegersPlugin VMMaker.oscog-eem.790 uuid: 1c0587fb-44ad-43f6-8bfd-2a0f91e21a59 " __DATE__ ;
+static char __buildInfo[] = "LargeIntegersPlugin VMMaker.oscog-eem.794 uuid: 7fd23b24-d4aa-4291-996a-760b99e0d7e2 " __DATE__ ;
@@ -53,14 +53,14 @@
static int cBytesReplacefromtowithstartingAt(unsigned char * pTo, sqInt start, sqInt stop, unsigned char * pFrom, sqInt repStart);
static sqInt cCopyIntValtoBytes(sqInt val, sqInt bytes);
static sqInt cCoreBytesRshiftCountnfbytesfromlentolen(sqInt count, sqInt n, sqInt f, sqInt b, unsigned char * pFrom, sqInt fromLen, unsigned char * pTo, sqInt toLen);
-static sqInt cCoreDigitDivDivlenremlenquolen(unsigned char * pDiv, sqInt divLen, unsigned char * pRem, sqInt remLen, unsigned char * pQuo, sqInt quoLen);
+static sqInt cCoreDigitDivDivlenremlenquolen(unsigned char *pDiv, sqInt divLen, unsigned char *pRem, sqInt remLen, unsigned char *pQuo, sqInt quoLen);
static unsigned char cDigitAddlenwithleninto(unsigned char * pByteShort, sqInt shortLen, unsigned char * pByteLong, sqInt longLen, unsigned char * pByteRes);
static sqInt cDigitComparewithlen(unsigned char * pFirst, unsigned char * pSecond, sqInt len);
static sqInt cDigitLengthOfCSI(sqInt csi);
static unsigned char cDigitMultiplylenwithleninto(unsigned char * pByteShort, sqInt shortLen, unsigned char * pByteLong, sqInt longLen, unsigned char * pByteRes);
static sqInt cDigitOfCSIat(sqInt csi, sqInt ix);
-static sqInt cDigitSublenwithleninto(unsigned char * pByteSmall, sqInt smallLen, unsigned char * pByteLarge, sqInt largeLen, unsigned char * pByteRes);
-static sqInt cdigitMontgomerylentimeslenmodulolenmInvModBinto(unsigned char * pBytesFirst, sqInt firstLen, unsigned char * pBytesSecond, sqInt secondLen, unsigned char * pBytesThird, sqInt thirdLen, sqInt mInv, unsigned char * pBytesRes);
+static sqInt cDigitSublenwithleninto(unsigned char *pByteSmall, sqInt smallLen, unsigned char *pByteLarge, sqInt largeLen, unsigned char *pByteRes);
+static sqInt cdigitMontgomerylentimeslenmodulolenmInvModBinto(unsigned char *pBytesFirst, sqInt firstLen, unsigned char *pBytesSecond, sqInt secondLen, unsigned char *pBytesThird, sqInt thirdLen, sqInt mInv, unsigned char *pBytesRes);
static sqInt cHighBit(sqInt uint);
static sqInt createLargeFromSmallInteger(sqInt anOop);
static sqInt digitAddLargewith(sqInt firstInteger, sqInt secondInteger);
@@ -172,9 +172,9 @@
struct VirtualMachine* interpreterProxy;
static const char *moduleName =
#ifdef SQUEAK_BUILTIN_PLUGIN
- "LargeIntegers v1.5 VMMaker.oscog-eem.790 (i)"
+ "LargeIntegers v1.5 VMMaker.oscog-eem.794 (i)"
#else
- "LargeIntegers v1.5 VMMaker.oscog-eem.790 (e)"
+ "LargeIntegers v1.5 VMMaker.oscog-eem.794 (e)"
#endif
;
static const int orOpIndex = 1;
@@ -300,9 +300,16 @@
sqInt newBytes;
sqInt oldLen;
- pushRemappableOop(aBytesObject);
+
+#if SPURVM
newBytes = instantiateClassindexableSize(fetchClassOf(aBytesObject), newLen);
- aBytesObject = popRemappableOop();
+
+#else /* SPURVM */
+pushRemappableOop(aBytesObject);
+ newBytes = instantiateClassindexableSize(fetchClassOf(aBytesObject), newLen);
+ aBytesObject = popRemappableOop()
+#endif /* SPURVM */
+;
oldLen = slotSizeOf(aBytesObject);
if (oldLen < newLen) {
copyLen = oldLen;
@@ -342,9 +349,16 @@
return integerObjectOf(0);
}
newLen = ((highBit + shiftCount) + 7) / 8;
- pushRemappableOop(aBytesOop);
+
+#if SPURVM
newBytes = instantiateClassindexableSize(fetchClassOf(aBytesOop), newLen);
- aBytesOop = popRemappableOop();
+
+#else /* SPURVM */
+pushRemappableOop(aBytesOop);
+ newBytes = instantiateClassindexableSize(fetchClassOf(aBytesOop), newLen);
+ aBytesOop = popRemappableOop()
+#endif /* SPURVM */
+;
/* begin cBytesLshift:from:len:to:len: */
pFrom = firstIndexableField(aBytesOop);
pTo = firstIndexableField(newBytes);
@@ -452,9 +466,16 @@
}
oldLen = slotSizeOf(aBytesOop);
newLen = i - b;
- pushRemappableOop(aBytesOop);
+
+#if SPURVM
newBytes = instantiateClassindexableSize(fetchClassOf(aBytesOop), newLen);
- aBytesOop = popRemappableOop();
+
+#else /* SPURVM */
+pushRemappableOop(aBytesOop);
+ newBytes = instantiateClassindexableSize(fetchClassOf(aBytesOop), newLen);
+ aBytesOop = popRemappableOop()
+#endif /* SPURVM */
+;
/* begin cCoreBytesRshiftCount:n:f:bytes:from:len:to:len: */
pFrom = firstIndexableField(aBytesOop);
pTo = firstIndexableField(newBytes);
@@ -683,7 +704,7 @@
}
static sqInt
-cCoreDigitDivDivlenremlenquolen(unsigned char * pDiv, sqInt divLen, unsigned char * pRem, sqInt remLen, unsigned char * pQuo, sqInt quoLen)
+cCoreDigitDivDivlenremlenquolen(unsigned char *pDiv, sqInt divLen, unsigned char *pRem, sqInt remLen, unsigned char *pQuo, sqInt quoLen)
{
sqInt a;
sqInt cond;
@@ -709,12 +730,9 @@
dl = divLen - 1;
ql = quoLen;
dh = pDiv[dl - 1];
- if (dl == 1) {
- dnh = 0;
- }
- else {
- dnh = pDiv[dl - 2];
- }
+ dnh = (dl == 1
+ ? 0
+ : pDiv[dl - 2]);
for (k = 1; k <= ql; k += 1) {
/* maintain quo*arg+rem=self */
@@ -783,13 +801,9 @@
a = 0;
for (i = 1; i <= divLen; i += 1) {
hi = (pDiv[i - 1]) * (((usqInt) q >> 8));
-
- /* pRem at: l - 1 put: lo - (lo // 256 * 256). */
- /* sign-tolerant form of (lo bitAnd: 255) -> obsolete... */
-
lo = (a + (pRem[l - 1])) - ((pDiv[i - 1]) * (q & 0xFF));
- pRem[l - 1] = (lo & 0xFF);
- a = (lo / 256) - hi;
+ pRem[l - 1] = lo;
+ a = (((signed)lo >> 8)) - hi;
l += 1;
}
if (a < 0) {
@@ -801,7 +815,7 @@
a = 0;
for (i = 1; i <= divLen; i += 1) {
a = ((((usqInt) a >> 8)) + (pRem[l - 1])) + (pDiv[i - 1]);
- pRem[l - 1] = (a & 0xFF);
+ pRem[l - 1] = a;
l += 1;
}
}
@@ -947,7 +961,7 @@
}
static sqInt
-cDigitSublenwithleninto(unsigned char * pByteSmall, sqInt smallLen, unsigned char * pByteLarge, sqInt largeLen, unsigned char * pByteRes)
+cDigitSublenwithleninto(unsigned char *pByteSmall, sqInt smallLen, unsigned char *pByteLarge, sqInt largeLen, unsigned char *pByteRes)
{
sqInt i;
sqInt z;
@@ -958,27 +972,27 @@
z = 0;
for (i = 0; i < smallLen; i += 1) {
z = (z + (pByteLarge[i])) - (pByteSmall[i]);
- pByteRes[i] = (z - ((z / 256) * 256));
+ pByteRes[i] = z;
z = ((signed)z >> 8);
}
for (i = smallLen; i < largeLen; i += 1) {
z += pByteLarge[i];
- pByteRes[i] = (z - ((z / 256) * 256));
+ pByteRes[i] = z;
z = ((signed)z >> 8);
}
}
static sqInt
-cdigitMontgomerylentimeslenmodulolenmInvModBinto(unsigned char * pBytesFirst, sqInt firstLen, unsigned char * pBytesSecond, sqInt secondLen, unsigned char * pBytesThird, sqInt thirdLen, sqInt mInv, unsigned char * pBytesRes)
+cdigitMontgomerylentimeslenmodulolenmInvModBinto(unsigned char *pBytesFirst, sqInt firstLen, unsigned char *pBytesSecond, sqInt secondLen, unsigned char *pBytesThird, sqInt thirdLen, sqInt mInv, unsigned char *pBytesRes)
{
- usqInt accum;
+ usqInt accum;
sqInt i;
sqInt k;
- unsigned char lastByte;
+ unsigned char lastByte;
sqInt limit1;
sqInt limit2;
sqInt limit3;
- unsigned char u;
+ unsigned char u;
limit1 = firstLen - 1;
limit2 = secondLen - 1;
@@ -1020,8 +1034,8 @@
accum = 0;
for (i = 0; i <= limit3; i += 1) {
accum = (accum + (pBytesRes[i])) - (pBytesThird[i]);
- pBytesRes[i] = (accum - ((accum / 256) * 256));
- accum = accum / 256;
+ pBytesRes[i] = accum;
+ accum = ((signed)accum >> 8);
}
}
}
@@ -1146,11 +1160,18 @@
longInt = firstInteger;
longLen = firstLen;
}
- pushRemappableOop(shortInt);
+
+#if SPURVM
+ sum = instantiateClassindexableSize(resClass, longLen);
+
+#else /* SPURVM */
+pushRemappableOop(shortInt);
pushRemappableOop(longInt);
sum = instantiateClassindexableSize(resClass, longLen);
longInt = popRemappableOop();
- shortInt = popRemappableOop();
+ shortInt = popRemappableOop()
+#endif /* SPURVM */
+;
/* begin cDigitAdd:len:with:len:into: */
pByteShort = firstIndexableField(shortInt);
pByteLong = firstIndexableField(longInt);
@@ -1171,9 +1192,16 @@
/* sum := sum growby: 1. */
- pushRemappableOop(sum);
+
+#if SPURVM
newSum = instantiateClassindexableSize(resClass, longLen + 1);
- sum = popRemappableOop();
+
+#else /* SPURVM */
+pushRemappableOop(sum);
+ newSum = instantiateClassindexableSize(resClass, longLen + 1);
+ sum = popRemappableOop()
+#endif /* SPURVM */
+;
cBytesCopyFromtolen(firstIndexableField(sum), firstIndexableField(newSum), longLen);
/* C index! */
@@ -1210,9 +1238,16 @@
if ((integerValueOf(firstInteger)) < 0) {
return primitiveFail();
}
- pushRemappableOop(secondInteger);
+
+#if SPURVM
firstLarge = createLargeFromSmallInteger(firstInteger);
- secondInteger = popRemappableOop();
+
+#else /* SPURVM */
+pushRemappableOop(secondInteger);
+ firstLarge = createLargeFromSmallInteger(firstInteger);
+ secondInteger = popRemappableOop()
+#endif /* SPURVM */
+;
}
else {
if ((fetchClassOf(firstInteger)) == (classLargeNegativeInteger())) {
@@ -1224,9 +1259,16 @@
if ((integerValueOf(secondInteger)) < 0) {
return primitiveFail();
}
- pushRemappableOop(firstLarge);
+
+#if SPURVM
secondLarge = createLargeFromSmallInteger(secondInteger);
- firstLarge = popRemappableOop();
+
+#else /* SPURVM */
+pushRemappableOop(firstLarge);
+ secondLarge = createLargeFromSmallInteger(secondInteger);
+ firstLarge = popRemappableOop()
+#endif /* SPURVM */
+;
}
else {
if ((fetchClassOf(secondInteger)) == (classLargeNegativeInteger())) {
@@ -1248,11 +1290,18 @@
longLen = firstLen;
longLarge = firstLarge;
}
- pushRemappableOop(shortLarge);
+
+#if SPURVM
+ result = instantiateClassindexableSize(classLargePositiveInteger(), longLen);
+
+#else /* SPURVM */
+pushRemappableOop(shortLarge);
pushRemappableOop(longLarge);
result = instantiateClassindexableSize(classLargePositiveInteger(), longLen);
longLarge = popRemappableOop();
- shortLarge = popRemappableOop();
+ shortLarge = popRemappableOop()
+#endif /* SPURVM */
+;
/* begin cByteOp:short:len:long:len:into: */
pByteShort = firstIndexableField(shortLarge);
pByteLong = firstIndexableField(longLarge);
@@ -1346,10 +1395,10 @@
sqInt l1;
sqInt lo;
sqInt mul;
- unsigned char * pDiv;
+ unsigned char *pDiv;
unsigned char *pointer;
- unsigned char * pQuo;
- unsigned char * pRem;
+ unsigned char *pQuo;
+ unsigned char *pRem;
sqInt q;
sqInt ql;
sqInt quo;
@@ -1373,29 +1422,61 @@
}
l = (firstLen - secondLen) + 1;
if (l <= 0) {
- pushRemappableOop(firstInteger);
+
+#if SPURVM
result = instantiateClassindexableSize(classArray(), 2);
- firstInteger = popRemappableOop();
+
+#else /* SPURVM */
+pushRemappableOop(firstInteger);
+ result = instantiateClassindexableSize(classArray(), 2);
+ firstInteger = popRemappableOop()
+#endif /* SPURVM */
+;
stObjectatput(result,1,(integerObjectOf(0)));
stObjectatput(result,2,firstInteger);
return result;
}
d = 8 - (cHighBit(((pointer = firstIndexableField(secondInteger)))[secondLen - 1]));
- pushRemappableOop(firstInteger);
+
+#if SPURVM
div = bytesLshift(secondInteger, d);
div = bytesOrIntgrowTo(div, (digitLength(div)) + 1);
- firstInteger = popRemappableOop();
- pushRemappableOop(div);
+
+#else /* SPURVM */
+pushRemappableOop(firstInteger);
+ div = bytesLshift(secondInteger, d);
+ div = bytesOrIntgrowTo(div, (digitLength(div)) + 1);
+ firstInteger = popRemappableOop()
+#endif /* SPURVM */
+;
+
+#if SPURVM
rem = bytesLshift(firstInteger, d);
if ((digitLength(rem)) == firstLen) {
rem = bytesOrIntgrowTo(rem, firstLen + 1);
}
- div = popRemappableOop();
- pushRemappableOop(div);
+
+#else /* SPURVM */
+pushRemappableOop(div);
+ rem = bytesLshift(firstInteger, d);
+ if ((digitLength(rem)) == firstLen) {
+ rem = bytesOrIntgrowTo(rem, firstLen + 1);
+ }
+ div = popRemappableOop()
+#endif /* SPURVM */
+;
+
+#if SPURVM
+ quo = instantiateClassindexableSize(resultClass, l);
+
+#else /* SPURVM */
+pushRemappableOop(div);
pushRemappableOop(rem);
quo = instantiateClassindexableSize(resultClass, l);
rem = popRemappableOop();
- div = popRemappableOop();
+ div = popRemappableOop()
+#endif /* SPURVM */
+;
/* begin cCoreDigitDivDiv:len:rem:len:quo:len: */
pDiv = firstIndexableField(div);
/* begin digitLength: */
@@ -1484,12 +1565,9 @@
dl = divLen - 1;
ql = quoLen;
dh = pDiv[dl - 1];
- if (dl == 1) {
- dnh = 0;
- }
- else {
- dnh = pDiv[dl - 2];
- }
+ dnh = (dl == 1
+ ? 0
+ : pDiv[dl - 2]);
for (k = 1; k <= ql; k += 1) {
/* maintain quo*arg+rem=self */
@@ -1558,13 +1636,9 @@
a = 0;
for (i = 1; i <= divLen; i += 1) {
hi = (pDiv[i - 1]) * (((usqInt) q >> 8));
-
- /* pRem at: l - 1 put: lo - (lo // 256 * 256). */
- /* sign-tolerant form of (lo bitAnd: 255) -> obsolete... */
-
lo = (a + (pRem[l1 - 1])) - ((pDiv[i - 1]) * (q & 0xFF));
- pRem[l1 - 1] = (lo & 0xFF);
- a = (lo / 256) - hi;
+ pRem[l1 - 1] = lo;
+ a = (((signed)lo >> 8)) - hi;
l1 += 1;
}
if (a < 0) {
@@ -1576,20 +1650,34 @@
a = 0;
for (i = 1; i <= divLen; i += 1) {
a = ((((usqInt) a >> 8)) + (pRem[l1 - 1])) + (pDiv[i - 1]);
- pRem[l1 - 1] = (a & 0xFF);
+ pRem[l1 - 1] = a;
l1 += 1;
}
}
pQuo[quoLen - k] = q;
}
- pushRemappableOop(quo);
+
+#if SPURVM
rem = bytesRshiftbyteslookfirst(rem, d, 0, (digitLength(div)) - 1);
- quo = popRemappableOop();
- pushRemappableOop(quo);
+
+#else /* SPURVM */
+pushRemappableOop(quo);
+ rem = bytesRshiftbyteslookfirst(rem, d, 0, (digitLength(div)) - 1);
+ quo = popRemappableOop()
+#endif /* SPURVM */
+;
+
+#if SPURVM
+ result = instantiateClassindexableSize(classArray(), 2);
+
+#else /* SPURVM */
+pushRemappableOop(quo);
pushRemappableOop(rem);
result = instantiateClassindexableSize(classArray(), 2);
rem = popRemappableOop();
- quo = popRemappableOop();
+ quo = popRemappableOop()
+#endif /* SPURVM */
+;
stObjectatput(result,1,quo);
stObjectatput(result,2,rem);
return result;
@@ -1622,22 +1710,22 @@
static sqInt
digitMontgomerytimesmodulomInvModB(sqInt firstLarge, sqInt secondLarge, sqInt thirdLarge, sqInt mInv)
{
- usqInt accum;
+ usqInt accum;
sqInt firstLen;
sqInt i;
sqInt k;
- unsigned char lastByte;
+ unsigned char lastByte;
sqInt limit1;
sqInt limit2;
sqInt limit3;
- unsigned char * pBytesFirst;
- unsigned char * pBytesRes;
- unsigned char * pBytesSecond;
- unsigned char * pBytesThird;
+ unsigned char *pBytesFirst;
+ unsigned char *pBytesRes;
+ unsigned char *pBytesSecond;
+ unsigned char *pBytesThird;
sqInt prod;
sqInt secondLen;
sqInt thirdLen;
- unsigned char u;
+ unsigned char u;
firstLen = slotSizeOf(firstLarge);
secondLen = slotSizeOf(secondLarge);
@@ -1652,13 +1740,20 @@
&& (mInv <= 0xFF))) {
return primitiveFail();
}
- pushRemappableOop(firstLarge);
+
+#if SPURVM
+ prod = instantiateClassindexableSize(classLargePositiveInteger(), thirdLen);
+
+#else /* SPURVM */
+pushRemappableOop(firstLarge);
pushRemappableOop(secondLarge);
pushRemappableOop(thirdLarge);
prod = instantiateClassindexableSize(classLargePositiveInteger(), thirdLen);
thirdLarge = popRemappableOop();
secondLarge = popRemappableOop();
- firstLarge = popRemappableOop();
+ firstLarge = popRemappableOop()
+#endif /* SPURVM */
+;
/* begin cdigitMontgomery:len:times:len:modulo:len:mInvModB:into: */
pBytesFirst = firstIndexableField(firstLarge);
pBytesSecond = firstIndexableField(secondLarge);
@@ -1704,8 +1799,8 @@
accum = 0;
for (i = 0; i <= limit3; i += 1) {
accum = (accum + (pBytesRes[i])) - (pBytesThird[i]);
- pBytesRes[i] = (accum - ((accum / 256) * 256));
- accum = accum / 256;
+ pBytesRes[i] = accum;
+ accum = ((signed)accum >> 8);
}
}
return normalizePositive(prod);
@@ -1757,11 +1852,18 @@
else {
resultClass = classLargePositiveInteger();
}
- pushRemappableOop(shortInt);
+
+#if SPURVM
+ prod = instantiateClassindexableSize(resultClass, longLen + shortLen);
+
+#else /* SPURVM */
+pushRemappableOop(shortInt);
pushRemappableOop(longInt);
prod = instantiateClassindexableSize(resultClass, longLen + shortLen);
longInt = popRemappableOop();
- shortInt = popRemappableOop();
+ shortInt = popRemappableOop()
+#endif /* SPURVM */
+;
/* begin cDigitMultiply:len:with:len:into: */
pByteShort = firstIndexableField(shortInt);
pByteLong = firstIndexableField(longInt);
@@ -1854,9 +1956,9 @@
sqInt larger;
sqInt largerLen;
sqInt neg;
- unsigned char * pByteLarge;
- unsigned char * pByteRes;
- unsigned char * pByteSmall;
+ unsigned char *pByteLarge;
+ unsigned char *pByteRes;
+ unsigned char *pByteSmall;
sqInt res;
sqInt resLen;
sqInt secondLen;
@@ -1891,13 +1993,22 @@
neg = firstNeg;
}
resLen = largerLen;
- pushRemappableOop(smaller);
+
+#if SPURVM
+ res = instantiateClassindexableSize((neg
+ ? classLargeNegativeInteger()
+ : classLargePositiveInteger()), resLen);
+
+#else /* SPURVM */
+pushRemappableOop(smaller);
pushRemappableOop(larger);
res = instantiateClassindexableSize((neg
? classLargeNegativeInteger()
: classLargePositiveInteger()), resLen);
larger = popRemappableOop();
- smaller = popRemappableOop();
+ smaller = popRemappableOop()
+#endif /* SPURVM */
+;
/* begin cDigitSub:len:with:len:into: */
pByteSmall = firstIndexableField(smaller);
pByteLarge = firstIndexableField(larger);
@@ -1908,12 +2019,12 @@
z = 0;
for (i = 0; i < smallerLen; i += 1) {
z = (z + (pByteLarge[i])) - (pByteSmall[i]);
- pByteRes[i] = (z - ((z / 256) * 256));
+ pByteRes[i] = z;
z = ((signed)z >> 8);
}
for (i = smallerLen; i < largerLen; i += 1) {
z += pByteLarge[i];
- pByteRes[i] = (z - ((z / 256) * 256));
+ pByteRes[i] = z;
z = ((signed)z >> 8);
}
return (neg
@@ -2322,9 +2433,16 @@
/* convert it to a not normalized LargeInteger */
- pushRemappableOop(secondInteger);
+
+#if SPURVM
firstLarge = createLargeFromSmallInteger(firstInteger);
- secondInteger = popRemappableOop();
+
+#else /* SPURVM */
+pushRemappableOop(secondInteger);
+ firstLarge = createLargeFromSmallInteger(firstInteger);
+ secondInteger = popRemappableOop()
+#endif /* SPURVM */
+;
}
else {
firstLarge = firstInteger;
@@ -2333,9 +2451,16 @@
/* convert it to a not normalized LargeInteger */
- pushRemappableOop(firstLarge);
+
+#if SPURVM
secondLarge = createLargeFromSmallInteger(secondInteger);
- firstLarge = popRemappableOop();
+
+#else /* SPURVM */
+pushRemappableOop(firstLarge);
+ secondLarge = createLargeFromSmallInteger(secondInteger);
+ firstLarge = popRemappableOop()
+#endif /* SPURVM */
+;
}
else {
secondLarge = secondInteger;
@@ -2369,9 +2494,16 @@
/* convert it to a not normalized LargeInteger */
- pushRemappableOop(secondInteger);
+
+#if SPURVM
firstLarge = createLargeFromSmallInteger(firstInteger);
- secondInteger = popRemappableOop();
+
+#else /* SPURVM */
+pushRemappableOop(secondInteger);
+ firstLarge = createLargeFromSmallInteger(firstInteger);
+ secondInteger = popRemappableOop()
+#endif /* SPURVM */
+;
}
else {
firstLarge = firstInteger;
@@ -2380,9 +2512,16 @@
/* convert it to a not normalized LargeInteger */
- pushRemappableOop(firstLarge);
+
+#if SPURVM
secondLarge = createLargeFromSmallInteger(secondInteger);
- firstLarge = popRemappableOop();
+
+#else /* SPURVM */
+pushRemappableOop(firstLarge);
+ secondLarge = createLargeFromSmallInteger(secondInteger);
+ firstLarge = popRemappableOop()
+#endif /* SPURVM */
+;
}
else {
secondLarge = secondInteger;
@@ -2842,9 +2981,16 @@
/* convert to LargeInteger */
- pushRemappableOop(secondInteger);
+
+#if SPURVM
firstAsLargeInteger = createLargeFromSmallInteger(firstInteger);
- secondInteger = popRemappableOop();
+
+#else /* SPURVM */
+pushRemappableOop(secondInteger);
+ firstAsLargeInteger = createLargeFromSmallInteger(firstInteger);
+ secondInteger = popRemappableOop()
+#endif /* SPURVM */
+;
}
else {
firstAsLargeInteger = firstInteger;
@@ -2857,9 +3003,16 @@
primitiveFail();
return null;
}
- pushRemappableOop(firstAsLargeInteger);
+
+#if SPURVM
secondAsLargeInteger = createLargeFromSmallInteger(secondInteger);
- firstAsLargeInteger = popRemappableOop();
+
+#else /* SPURVM */
+pushRemappableOop(firstAsLargeInteger);
+ secondAsLargeInteger = createLargeFromSmallInteger(secondInteger);
+ firstAsLargeInteger = popRemappableOop()
+#endif /* SPURVM */
+;
}
else {
secondAsLargeInteger = secondInteger;
@@ -2899,9 +3052,16 @@
/* convert to LargeInteger */
- pushRemappableOop(secondInteger);
+
+#if SPURVM
firstAsLargeInteger = createLargeFromSmallInteger(firstInteger);
- secondInteger = popRemappableOop();
+
+#else /* SPURVM */
+pushRemappableOop(secondInteger);
+ firstAsLargeInteger = createLargeFromSmallInteger(firstInteger);
+ secondInteger = popRemappableOop()
+#endif /* SPURVM */
+;
}
else {
firstAsLargeInteger = firstInteger;
@@ -2914,9 +3074,16 @@
primitiveFail();
return null;
}
- pushRemappableOop(firstAsLargeInteger);
+
+#if SPURVM
secondAsLargeInteger = createLargeFromSmallInteger(secondInteger);
- firstAsLargeInteger = popRemappableOop();
+
+#else /* SPURVM */
+pushRemappableOop(firstAsLargeInteger);
+ secondAsLargeInteger = createLargeFromSmallInteger(secondInteger);
+ firstAsLargeInteger = popRemappableOop()
+#endif /* SPURVM */
+;
}
else {
secondAsLargeInteger = secondInteger;
@@ -2952,9 +3119,16 @@
/* convert it to a not normalized LargeInteger */
- pushRemappableOop(secondInteger);
+
+#if SPURVM
firstLarge = createLargeFromSmallInteger(firstInteger);
- secondInteger = popRemappableOop();
+
+#else /* SPURVM */
+pushRemappableOop(secondInteger);
+ firstLarge = createLargeFromSmallInteger(firstInteger);
+ secondInteger = popRemappableOop()
+#endif /* SPURVM */
+;
}
else {
firstLarge = firstInteger;
@@ -2963,9 +3137,16 @@
/* convert it to a not normalized LargeInteger */
- pushRemappableOop(firstLarge);
+
+#if SPURVM
secondLarge = createLargeFromSmallInteger(secondInteger);
- firstLarge = popRemappableOop();
+
+#else /* SPURVM */
+pushRemappableOop(firstLarge);
+ secondLarge = createLargeFromSmallInteger(secondInteger);
+ firstLarge = popRemappableOop()
+#endif /* SPURVM */
+;
}
else {
secondLarge = secondInteger;
@@ -3001,9 +3182,16 @@
/* convert it to a not normalized LargeInteger */
- pushRemappableOop(secondInteger);
+
+#if SPURVM
firstLarge = createLargeFromSmallInteger(firstInteger);
- secondInteger = popRemappableOop();
+
+#else /* SPURVM */
+pushRemappableOop(secondInteger);
+ firstLarge = createLargeFromSmallInteger(firstInteger);
+ secondInteger = popRemappableOop()
+#endif /* SPURVM */
+;
}
else {
firstLarge = firstInteger;
@@ -3012,9 +3200,16 @@
/* convert it to a not normalized LargeInteger */
- pushRemappableOop(firstLarge);
+
+#if SPURVM
secondLarge = createLargeFromSmallInteger(secondInteger);
- firstLarge = popRemappableOop();
+
+#else /* SPURVM */
+pushRemappableOop(firstLarge);
+ secondLarge = createLargeFromSmallInteger(secondInteger);
+ firstLarge = popRemappableOop()
+#endif /* SPURVM */
+;
}
else {
secondLarge = secondInteger;
@@ -3048,9 +3243,16 @@
/* convert it to a not normalized LargeInteger */
- pushRemappableOop(secondInteger);
+
+#if SPURVM
firstLarge = createLargeFromSmallInteger(firstInteger);
- secondInteger = popRemappableOop();
+
+#else /* SPURVM */
+pushRemappableOop(secondInteger);
+ firstLarge = createLargeFromSmallInteger(firstInteger);
+ secondInteger = popRemappableOop()
+#endif /* SPURVM */
+;
}
else {
firstLarge = firstInteger;
@@ -3059,9 +3261,16 @@
/* convert it to a not normalized LargeInteger */
- pushRemappableOop(firstLarge);
+
+#if SPURVM
secondLarge = createLargeFromSmallInteger(secondInteger);
- firstLarge = popRemappableOop();
+
+#else /* SPURVM */
+pushRemappableOop(firstLarge);
+ secondLarge = createLargeFromSmallInteger(secondInteger);
+ firstLarge = popRemappableOop()
+#endif /* SPURVM */
+;
}
else {
secondLarge = secondInteger;
@@ -3095,9 +3304,16 @@
/* convert it to a not normalized LargeInteger */
- pushRemappableOop(secondInteger);
+
+#if SPURVM
firstLarge = createLargeFromSmallInteger(firstInteger);
- secondInteger = popRemappableOop();
+
+#else /* SPURVM */
+pushRemappableOop(secondInteger);
+ firstLarge = createLargeFromSmallInteger(firstInteger);
+ secondInteger = popRemappableOop()
+#endif /* SPURVM */
+;
}
else {
firstLarge = firstInteger;
@@ -3106,9 +3322,16 @@
/* convert it to a not normalized LargeInteger */
- pushRemappableOop(firstLarge);
+
+#if SPURVM
secondLarge = createLargeFromSmallInteger(secondInteger);
- firstLarge = popRemappableOop();
+
+#else /* SPURVM */
+pushRemappableOop(firstLarge);
+ secondLarge = createLargeFromSmallInteger(secondInteger);
+ firstLarge = popRemappableOop()
+#endif /* SPURVM */
+;
}
else {
secondLarge = secondInteger;
@@ -3149,20 +3372,20 @@
EXPORT(sqInt)
primMontgomeryTimesModulo(void)
{
- usqInt accum;
+ usqInt accum;
sqInt firstInteger;
sqInt firstLarge;
sqInt firstLen;
sqInt i;
sqInt k;
- unsigned char lastByte;
+ unsigned char lastByte;
sqInt limit1;
sqInt limit2;
sqInt limit3;
- unsigned char * pBytesFirst;
- unsigned char * pBytesRes;
- unsigned char * pBytesSecond;
- unsigned char * pBytesThird;
+ unsigned char *pBytesFirst;
+ unsigned char *pBytesRes;
+ unsigned char *pBytesSecond;
+ unsigned char *pBytesThird;
sqInt prod;
sqInt secondLarge;
sqInt secondLen;
@@ -3171,7 +3394,7 @@
sqInt thirdLarge;
sqInt thirdLen;
sqInt thirdModuloInteger;
- unsigned char u;
+ unsigned char u;
sqInt _return_value;
success(isKindOf(stackValue(2), "Integer"));
@@ -3189,11 +3412,18 @@
/* convert it to a not normalized LargeInteger */
- pushRemappableOop(secondOperandInteger);
+
+#if SPURVM
+ firstLarge = createLargeFromSmallInteger(firstInteger);
+
+#else /* SPURVM */
+pushRemappableOop(secondOperandInteger);
pushRemappableOop(thirdModuloInteger);
firstLarge = createLargeFromSmallInteger(firstInteger);
thirdModuloInteger = popRemappableOop();
- secondOperandInteger = popRemappableOop();
+ secondOperandInteger = popRemappableOop()
+#endif /* SPURVM */
+;
}
else {
firstLarge = firstInteger;
@@ -3202,11 +3432,18 @@
/* convert it to a not normalized LargeInteger */
- pushRemappableOop(firstLarge);
+
+#if SPURVM
+ secondLarge = createLargeFromSmallInteger(secondOperandInteger);
+
+#else /* SPURVM */
+pushRemappableOop(firstLarge);
pushRemappableOop(thirdModuloInteger);
secondLarge = createLargeFromSmallInteger(secondOperandInteger);
thirdModuloInteger = popRemappableOop();
- firstLarge = popRemappableOop();
+ firstLarge = popRemappableOop()
+#endif /* SPURVM */
+;
}
else {
secondLarge = secondOperandInteger;
@@ -3215,11 +3452,18 @@
/* convert it to a not normalized LargeInteger */
- pushRemappableOop(firstLarge);
+
+#if SPURVM
+ thirdLarge = createLargeFromSmallInteger(thirdModuloInteger);
+
+#else /* SPURVM */
+pushRemappableOop(firstLarge);
pushRemappableOop(secondLarge);
thirdLarge = createLargeFromSmallInteger(thirdModuloInteger);
secondLarge = popRemappableOop();
- firstLarge = popRemappableOop();
+ firstLarge = popRemappableOop()
+#endif /* SPURVM */
+;
}
else {
thirdLarge = thirdModuloInteger;
@@ -3241,13 +3485,20 @@
_return_value = primitiveFail();
goto l1;
}
- pushRemappableOop(firstLarge);
+
+#if SPURVM
+ prod = instantiateClassindexableSize(classLargePositiveInteger(), thirdLen);
+
+#else /* SPURVM */
+pushRemappableOop(firstLarge);
pushRemappableOop(secondLarge);
pushRemappableOop(thirdLarge);
prod = instantiateClassindexableSize(classLargePositiveInteger(), thirdLen);
thirdLarge = popRemappableOop();
secondLarge = popRemappableOop();
- firstLarge = popRemappableOop();
+ firstLarge = popRemappableOop()
+#endif /* SPURVM */
+;
/* begin cdigitMontgomery:len:times:len:modulo:len:mInvModB:into: */
pBytesFirst = firstIndexableField(firstLarge);
pBytesSecond = firstIndexableField(secondLarge);
@@ -3293,8 +3544,8 @@
accum = 0;
for (i = 0; i <= limit3; i += 1) {
accum = (accum + (pBytesRes[i])) - (pBytesThird[i]);
- pBytesRes[i] = (accum - ((accum / 256) * 256));
- accum = accum / 256;
+ pBytesRes[i] = accum;
+ accum = ((signed)accum >> 8);
}
}
_return_value = normalizePositive(prod);
More information about the Vm-dev
mailing list