[pypy-commit] lang-smalltalk 64bit: simplify some r_uint/r_uint32 distinctions. this 64bit vm still works ; )
timfel
noreply at buildbot.pypy.org
Thu Jan 16 15:04:50 CET 2014
Author: Tim Felgentreff <timfelgentreff at gmail.com>
Branch: 64bit
Changeset: r573:04dd02446fb4
Date: 2014-01-10 22:26 +0100
http://bitbucket.org/pypy/lang-smalltalk/changeset/04dd02446fb4/
Log: simplify some r_uint/r_uint32 distinctions. this 64bit vm still
works ;)
diff --git a/spyvm/display.py b/spyvm/display.py
--- a/spyvm/display.py
+++ b/spyvm/display.py
@@ -1,4 +1,3 @@
-from rpython.rlib.rarithmetic import r_uint32 as r_uint
from rpython.rtyper.lltypesystem import lltype, rffi
from rpython.rlib.runicode import unicode_encode_utf_8
from rpython.rlib import jit
diff --git a/spyvm/model.py b/spyvm/model.py
--- a/spyvm/model.py
+++ b/spyvm/model.py
@@ -395,11 +395,11 @@
from rpython.rlib.rstruct.ieee import float_pack
r = float_pack(self.value, 8) # C double
if n0 == 0:
- return space.wrap_uint(r_uint32(intmask(r >> 32)))
+ return space.wrap_positive_32bit_int(intmask(r >> 32))
else:
# bounds-check for primitive access is done in the primitive
assert n0 == 1
- return space.wrap_uint(r_uint32(intmask(r)))
+ return space.wrap_positive_32bit_int(intmask(r))
def store(self, space, n0, w_obj):
from rpython.rlib.rstruct.ieee import float_unpack, float_pack
@@ -974,7 +974,7 @@
class W_DisplayBitmap(W_AbstractObjectWithClassReference):
_attrs_ = ['pixelbuffer', '_realsize', '_real_depth_buffer', 'display', '_depth']
- _immutable_fields_ = ['_realsize', 'display', '_depth']
+ _immutable_fields_ = ['_realsize', 'display', '_depth', '_real_depth_buffer']
@staticmethod
def create(space, w_class, size, depth, display):
@@ -989,7 +989,6 @@
def __init__(self, space, w_class, size, depth, display):
W_AbstractObjectWithClassReference.__init__(self, space, w_class)
- # self._real_depth_buffer = lltype.malloc(rffi.CArray(rffi.UINT), size, flavor='raw')
self._real_depth_buffer = [r_uint(0)] * size
self.pixelbuffer = display.get_pixelbuffer()
self._realsize = size
diff --git a/spyvm/plugins/bitblt.py b/spyvm/plugins/bitblt.py
--- a/spyvm/plugins/bitblt.py
+++ b/spyvm/plugins/bitblt.py
@@ -4,7 +4,7 @@
from spyvm.plugins.plugin import Plugin
from rpython.rlib import jit, objectmodel
-from rpython.rlib.rarithmetic import intmask, r_uint32, r_uint
+from rpython.rlib.rarithmetic import intmask, r_uint
BitBltPlugin = Plugin()
@@ -264,19 +264,19 @@
destWord = self.dest.w_bits.getword(self.destIndex)
mergeWord = self.mergeFn(halftoneWord, destWord)
destWord = (destMask & mergeWord) | (destWord & (~destMask))
- self.dest.w_bits.setword(self.destIndex, r_uint32(destWord))
+ self.dest.w_bits.setword(self.destIndex, destWord)
self.destIndex += 1
destMask = BitBltShadow.AllOnes
# the central horizontal loop requires no store masking
if self.combinationRule == 3: # store rule requires no dest merging
for word in range(2, self.nWords):
- self.dest.w_bits.setword(self.destIndex, r_uint32(halftoneWord))
+ self.dest.w_bits.setword(self.destIndex, halftoneWord)
self.destIndex += 1
else:
for word in range(2, self.nWords):
destWord = self.dest.w_bits.getword(self.destIndex)
mergeWord = self.mergeFn(halftoneWord, destWord)
- self.dest.w_bits.setword(self.destIndex, r_uint32(mergeWord))
+ self.dest.w_bits.setword(self.destIndex, mergeWord)
self.destIndex += 1
# last word in row is masked
if self.nWords > 1:
@@ -284,7 +284,7 @@
destWord = self.dest.w_bits.getword(self.destIndex)
mergeWord = self.mergeFn(halftoneWord, destWord)
destWord = (destMask & mergeWord) | (destWord & (~destMask))
- self.dest.w_bits.setword(self.destIndex, r_uint32(destWord))
+ self.dest.w_bits.setword(self.destIndex, destWord)
self.destIndex += 1
self.destIndex += self.destDelta
@@ -346,13 +346,13 @@
if self.destMask == BitBltShadow.AllOnes: # avoid read-modify-write
self.dest.w_bits.setword(
self.destIndex,
- r_uint32(self.mergeFn(skewWord & halftoneWord, self.dest.w_bits.getword(self.destIndex)))
+ self.mergeFn(skewWord & halftoneWord, self.dest.w_bits.getword(self.destIndex))
)
else: # General version using dest masking
destWord = self.dest.w_bits.getword(self.destIndex)
mergeWord = self.mergeFn(skewWord & halftoneWord, destWord & self.destMask)
destWord = (self.destMask & mergeWord) | (destWord & (~self.destMask))
- self.dest.w_bits.setword(self.destIndex, r_uint32(destWord))
+ self.dest.w_bits.setword(self.destIndex, destWord)
self.destIndex += 1
if (self.nWords == 2): # is the next word the last word?
@@ -458,7 +458,7 @@
destWord = self.dest.w_bits.getword(self.destIndex)
mergeWord = self.mergeFn(skewWord & halftoneWord, destWord)
destWord = (destMask & mergeWord) | (destWord & (~destMask))
- self.dest.w_bits.setword(self.destIndex, r_uint32(destWord))
+ self.dest.w_bits.setword(self.destIndex, destWord)
# The central horizontal loop requires no store masking
self.destIndex += hInc
destMask = BitBltShadow.AllOnes
@@ -468,12 +468,12 @@
if (self.hDir == -1):
for word in range(2, self.nWords):
thisWord = self.source.w_bits.getword(self.sourceIndex)
- self.dest.w_bits.setword(self.destIndex, r_uint32(thisWord))
+ self.dest.w_bits.setword(self.destIndex, thisWord)
self.sourceIndex += hInc
self.destIndex += hInc
else:
for word in range(2, self.nWords):
- self.dest.w_bits.setword(self.destIndex, r_uint32(prevWord))
+ self.dest.w_bits.setword(self.destIndex, prevWord)
prevWord = self.source.w_bits.getword(self.sourceIndex)
self.destIndex += hInc
self.sourceIndex += hInc
@@ -484,7 +484,7 @@
self.sourceIndex += hInc
skewWord = self.rotate32bit(thisWord, prevWord, skewMask, notSkewMask, unskew)
prevWord = thisWord
- self.dest.w_bits.setword(self.destIndex, r_uint32(skewWord & halftoneWord))
+ self.dest.w_bits.setword(self.destIndex, skewWord & halftoneWord)
self.destIndex += hInc
else: # Dest merging here...
for word in range(2, self.nWords):
@@ -493,7 +493,7 @@
skewWord = self.rotate32bit(thisWord, prevWord, skewMask, notSkewMask, unskew)
prevWord = thisWord
mergeWord = self.mergeFn(skewWord & halftoneWord, self.dest.w_bits.getword(self.destIndex))
- self.dest.w_bits.setword(self.destIndex, r_uint32(mergeWord))
+ self.dest.w_bits.setword(self.destIndex, mergeWord)
self.destIndex += hInc
# last word with masking and all
if (self.nWords > 1):
@@ -507,7 +507,7 @@
destWord = self.dest.w_bits.getword(self.destIndex)
mergeWord = self.mergeFn(skewWord & halftoneWord, destWord)
destWord = (destMask & mergeWord) | (destWord & (~destMask))
- self.dest.w_bits.setword(self.destIndex, r_uint32(destWord))
+ self.dest.w_bits.setword(self.destIndex, destWord)
self.destIndex += hInc
self.sourceIndex += self.sourceDelta
self.destIndex += self.destDelta
@@ -521,7 +521,6 @@
@objectmodel.specialize.arg_or_var(3)
def merge(self, source_word, dest_word, combinationRule):
- # assert isinstance(source_word, r_uint) and isinstance(dest_word, r_uint)
if combinationRule == 0:
return 0
elif combinationRule == 1:
diff --git a/spyvm/plugins/fileplugin.py b/spyvm/plugins/fileplugin.py
--- a/spyvm/plugins/fileplugin.py
+++ b/spyvm/plugins/fileplugin.py
@@ -154,6 +154,6 @@
def smalltalk_timestamp(space, sec_since_epoch):
import time
from spyvm.primitives import secs_between_1901_and_1970
- from rpython.rlib.rarithmetic import r_uint32 as r_uint
- sec_since_1901 = r_uint(int(sec_since_epoch + secs_between_1901_and_1970))
+ from rpython.rlib.rarithmetic import r_uint
+ sec_since_1901 = r_uint(sec_since_epoch + secs_between_1901_and_1970)
return space.wrap_uint(sec_since_1901)
diff --git a/spyvm/primitives.py b/spyvm/primitives.py
--- a/spyvm/primitives.py
+++ b/spyvm/primitives.py
@@ -5,11 +5,11 @@
from spyvm import model, shadow
from spyvm import constants, display
from spyvm.error import PrimitiveFailedError, \
- PrimitiveNotYetWrittenError
+ PrimitiveNotYetWrittenError, WrappingError
from spyvm import wrapper
from rpython.rlib import rarithmetic, rfloat, unroll, jit
-from rpython.rlib.rarithmetic import r_uint32, r_uint
+from rpython.rlib.rarithmetic import r_uint
def assert_bounds(n0, minimum, maximum):
if not minimum <= n0 < maximum:
@@ -247,9 +247,9 @@
# #bitShift: -- return the shifted value
@expose_primitive(BIT_SHIFT, unwrap_spec=[object, int])
def func(interp, s_frame, receiver, argument):
- # from rpython.rlib.rarithmetic import LONG_BIT
+ from rpython.rlib.rarithmetic import LONG_BIT
# XXX: 32-bit images only!
- LONG_BIT = 32
+ # LONG_BIT = 32
if -LONG_BIT < argument < LONG_BIT:
# overflow-checking done in lshift implementations
if argument > 0:
@@ -296,21 +296,16 @@
return w_res
make_func(op)
-# XXX: 32-bit only
-def ovfcheck_float_to_int(x):
- from rpython.rlib.rfloat import isnan
- if isnan(x):
- raise OverflowError
- if -2147483649.0 < x < 2147483648.0:
- return int(x)
- raise OverflowError
-
@expose_primitive(FLOAT_TRUNCATED, unwrap_spec=[float])
def func(interp, s_frame, f):
try:
- return interp.space.wrap_int(ovfcheck_float_to_int(f))
+ integer = rarithmetic.ovfcheck_float_to_int(f)
except OverflowError:
raise PrimitiveFailedError
+ try:
+ return interp.space.wrap_int(integer) # in 64bit VMs, this may fail
+ except WrappingError:
+ raise PrimitiveFailedError
@expose_primitive(FLOAT_TIMES_TWO_POWER, unwrap_spec=[float, int])
def func(interp, s_frame, rcvr, arg):
@@ -1043,7 +1038,7 @@
sec_since_epoch = r_uint(int(time.time()))
# XXX: overflow check necessary?
sec_since_1901 = sec_since_epoch + secs_between_1901_and_1970
- return interp.space.wrap_uint(r_uint32(sec_since_1901))
+ return interp.space.wrap_uint(r_uint(sec_since_1901))
#____________________________________________________________________________
@@ -1085,12 +1080,9 @@
raise PrimitiveFailedError
for i in xrange(w_arg.size()):
w_arg.setchar(i, chr(new_value))
- elif isinstance(w_arg, model.W_WordsObject):
+ elif isinstance(w_arg, model.W_WordsObject) or isinstance(w_arg, model.W_DisplayBitmap):
for i in xrange(w_arg.size()):
- w_arg.setword(i, new_value)
- elif isinstance(w_arg, model.W_DisplayBitmap):
- for i in xrange(w_arg.size()):
- w_arg.setword(i, r_uint32(new_value))
+ w_arg.setword(i, r_uint(new_value))
else:
raise PrimitiveFailedError
return w_arg
diff --git a/spyvm/shadow.py b/spyvm/shadow.py
--- a/spyvm/shadow.py
+++ b/spyvm/shadow.py
@@ -2,7 +2,6 @@
from spyvm import model, constants, error, wrapper
from rpython.tool.pairtype import extendabletype
from rpython.rlib import rarithmetic, jit
-from rpython.rlib.rarithmetic import r_uint
def make_elidable_after_versioning(func):
@@ -650,7 +649,7 @@
self._temps_and_stack = [None] * (stacksize + tempsize)
for i in range(tempsize):
self._temps_and_stack[i] = self.space.w_nil
- self._stack_ptr = r_uint(tempsize) # we point after the last element
+ self._stack_ptr = rarithmetic.r_uint(tempsize) # we point after the last element
# ______________________________________________________________________
# Stack Manipulation
@@ -683,11 +682,11 @@
return self.peek(0)
def set_top(self, value, position=0):
- rpos = r_uint(position)
+ rpos = rarithmetic.r_uint(position)
self._temps_and_stack[self._stack_ptr + ~rpos] = value
def peek(self, idx):
- rpos = r_uint(idx)
+ rpos = rarithmetic.r_uint(idx)
return self._temps_and_stack[jit.promote(self._stack_ptr) + ~rpos]
@jit.unroll_safe
diff --git a/spyvm/squeakimage.py b/spyvm/squeakimage.py
--- a/spyvm/squeakimage.py
+++ b/spyvm/squeakimage.py
@@ -558,7 +558,7 @@
return bytes[:stop] # omit odd bytes
def get_ruints(self, required_len=-1):
- from rpython.rlib.rarithmetic import r_uint32 as r_uint
+ from rpython.rlib.rarithmetic import r_uint
words = [r_uint(x) for x in self.chunk.data]
if required_len != -1 and len(words) != required_len:
raise CorruptImageError("Expected %d words, got %d" % (required_len, len(words)))
More information about the pypy-commit
mailing list