Author: Matti Picus <matti.pi...@gmail.com>
Branch: release-2.3.x
Changeset: r71096:99d54aa2a1e4
Date: 2014-04-30 20:01 +0300
http://bitbucket.org/pypy/pypy/changeset/99d54aa2a1e4/

Log:    merge default into branch

diff --git a/pypy/tool/release/force-builds.py 
b/pypy/tool/release/force-builds.py
--- a/pypy/tool/release/force-builds.py
+++ b/pypy/tool/release/force-builds.py
@@ -41,10 +41,9 @@
         import pwd
         return pwd.getpwuid(os.getuid())[0]
 
-def main():
+def main(branch, server):
     #XXX: handle release tags
     #XXX: handle validity checks
-    branch = sys.argv[1]
     lock = defer.DeferredLock()
     requests = []
     def ebList(err):
@@ -54,10 +53,11 @@
 
     for builder in BUILDERS:
         print 'Forcing', builder, '...'
-        url = "http://buildbot.pypy.org/builders/"; + builder + "/force"
+        url = "http://"; + server + "/builders/" + builder + "/force"
         args = [
             ('username', get_user()),
             ('revision', ''),
+            ('forcescheduler', 'Force Scheduler'),
             ('submit', 'Force Build'),
             ('branch', branch),
             ('comments', "Forced by command line script")]
@@ -73,4 +73,11 @@
 
 if __name__ == '__main__':
     log.startLogging(sys.stdout)
-    main()
+    import optparse
+    parser = optparse.OptionParser()
+    parser.add_option("-b", "--branch", help="branch to build", default='')
+    parser.add_option("-s", "--server", help="buildbot server", 
default="buildbot.pypy.org")
+    (options, args) = parser.parse_args()
+    if  not options.branch:
+        parser.error("branch option required")
+    main(options.branch, options.server)
diff --git a/rpython/jit/backend/test/runner_test.py 
b/rpython/jit/backend/test/runner_test.py
--- a/rpython/jit/backend/test/runner_test.py
+++ b/rpython/jit/backend/test/runner_test.py
@@ -4347,3 +4347,10 @@
                                'void')
         assert foo[0] == 1789201
         lltype.free(foo, flavor='raw')
+
+    def test_cast_float_to_singlefloat(self):
+        if not self.cpu.supports_singlefloats:
+            py.test.skip("requires singlefloats")
+        res = self.execute_operation(rop.CAST_FLOAT_TO_SINGLEFLOAT,
+                                   [BoxFloat(12.5)], 'int')
+        assert res.getint() == struct.unpack("I", struct.pack("f", 12.5))[0]
diff --git a/rpython/jit/backend/x86/assembler.py 
b/rpython/jit/backend/x86/assembler.py
--- a/rpython/jit/backend/x86/assembler.py
+++ b/rpython/jit/backend/x86/assembler.py
@@ -1173,13 +1173,13 @@
         self.mc.CVTSD2SS(loctmp, loc0)
         assert isinstance(resloc, RegLoc)
         assert isinstance(loctmp, RegLoc)
-        self.mc.MOVD_rx(resloc.value, loctmp.value)
+        self.mc.MOVD32_rx(resloc.value, loctmp.value)
 
     def genop_cast_singlefloat_to_float(self, op, arglocs, resloc):
         loc0, = arglocs
         assert isinstance(resloc, RegLoc)
         assert isinstance(loc0, RegLoc)
-        self.mc.MOVD_xr(resloc.value, loc0.value)
+        self.mc.MOVD32_xr(resloc.value, loc0.value)
         self.mc.CVTSS2SD_xx(resloc.value, resloc.value)
 
     def genop_convert_float_bytes_to_longlong(self, op, arglocs, resloc):
@@ -1187,7 +1187,7 @@
         if longlong.is_64_bit:
             assert isinstance(resloc, RegLoc)
             assert isinstance(loc0, RegLoc)
-            self.mc.MOVD(resloc, loc0)
+            self.mc.MOVDQ(resloc, loc0)
         else:
             self.mov(loc0, resloc)
 
@@ -1196,7 +1196,7 @@
         if longlong.is_64_bit:
             assert isinstance(resloc, RegLoc)
             assert isinstance(loc0, RegLoc)
-            self.mc.MOVD(resloc, loc0)
+            self.mc.MOVDQ(resloc, loc0)
         else:
             self.mov(loc0, resloc)
 
@@ -1262,7 +1262,7 @@
         loc = arglocs[0]
         assert isinstance(resloc, RegLoc)
         if isinstance(loc, RegLoc):
-            self.mc.MOVD_rx(resloc.value, loc.value)
+            self.mc.MOVD32_rx(resloc.value, loc.value)
         elif isinstance(loc, FrameLoc):
             self.mc.MOV_rb(resloc.value, loc.value)
         else:
@@ -1277,16 +1277,16 @@
             assert isinstance(loc1, RegLoc)
             assert isinstance(loc2, RegLoc)
             assert isinstance(resloc, RegLoc)
-            self.mc.MOVD_xr(loc2.value, loc1.value)
+            self.mc.MOVD32_xr(loc2.value, loc1.value)
             self.mc.PSRAD_xi(loc2.value, 31)    # -> 0 or -1
-            self.mc.MOVD_xr(resloc.value, loc1.value)
+            self.mc.MOVD32_xr(resloc.value, loc1.value)
             self.mc.PUNPCKLDQ_xx(resloc.value, loc2.value)
 
     def genop_llong_from_uint(self, op, arglocs, resloc):
         loc1, = arglocs
         assert isinstance(resloc, RegLoc)
         assert isinstance(loc1, RegLoc)
-        self.mc.MOVD_xr(resloc.value, loc1.value)
+        self.mc.MOVD32_xr(resloc.value, loc1.value)
 
     def genop_llong_eq(self, op, arglocs, resloc):
         loc1, loc2, locxtmp = arglocs
@@ -1571,8 +1571,8 @@
             self.mc.OR_rr(edx.value, eax.value)
         else:
             loc1, = arglocs
-            self.mc.MOVD_xr(loc1.value, edx.value)
-            self.mc.MOVD_xr(resloc.value, eax.value)
+            self.mc.MOVD32_xr(loc1.value, edx.value)
+            self.mc.MOVD32_xr(resloc.value, eax.value)
             self.mc.PUNPCKLDQ_xx(resloc.value, loc1.value)
 
     def genop_guard_guard_true(self, ign_1, guard_op, guard_token, locs, 
ign_2):
diff --git a/rpython/jit/backend/x86/callbuilder.py 
b/rpython/jit/backend/x86/callbuilder.py
--- a/rpython/jit/backend/x86/callbuilder.py
+++ b/rpython/jit/backend/x86/callbuilder.py
@@ -242,8 +242,8 @@
             if self.tmpresloc is None:
                 if self.restype == 'L':     # long long
                     # move eax/edx -> xmm0
-                    self.mc.MOVD_xr(resloc.value^1, edx.value)
-                    self.mc.MOVD_xr(resloc.value,   eax.value)
+                    self.mc.MOVD32_xr(resloc.value^1, edx.value)
+                    self.mc.MOVD32_xr(resloc.value,   eax.value)
                     self.mc.PUNPCKLDQ_xx(resloc.value, resloc.value^1)
                 else:
                     # float: we have to go via the stack
@@ -435,7 +435,7 @@
                 if isinstance(src, ImmedLoc):
                     self.mc.MOV(X86_64_SCRATCH_REG, src)
                     src = X86_64_SCRATCH_REG
-                self.mc.MOVD(dst, src)
+                self.mc.MOVD32(dst, src)
         # Finally remap the arguments in the main regs
         remap_frame_layout(self.asm, src_locs, dst_locs, X86_64_SCRATCH_REG)
 
@@ -447,7 +447,7 @@
         if self.restype == 'S' and self.tmpresloc is None:
             # singlefloat return: use MOVD to load the target register
             # from the lower 32 bits of XMM0
-            self.mc.MOVD(self.resloc, xmm0)
+            self.mc.MOVD32(self.resloc, xmm0)
         else:
             CallBuilderX86.load_result(self)
 
@@ -469,7 +469,7 @@
         if self.restype == 'S':
             # singlefloat return: use MOVD to store the lower 32 bits
             # of XMM0 into the tmpresloc (register or [ESP])
-            self.mc.MOVD(self.tmpresloc, xmm0)
+            self.mc.MOVD32(self.tmpresloc, xmm0)
         else:
             assert self.restype == INT
             self.mc.MOV(self.tmpresloc, eax)
diff --git a/rpython/jit/backend/x86/regloc.py 
b/rpython/jit/backend/x86/regloc.py
--- a/rpython/jit/backend/x86/regloc.py
+++ b/rpython/jit/backend/x86/regloc.py
@@ -662,7 +662,8 @@
     PXOR  = _binaryop('PXOR')
     PCMPEQD = _binaryop('PCMPEQD')
 
-    MOVD = _binaryop('MOVD')
+    MOVDQ = _binaryop('MOVDQ')
+    MOVD32 = _binaryop('MOVD32')
 
     CALL = _relative_unaryop('CALL')
     JMP = _relative_unaryop('JMP')
diff --git a/rpython/jit/backend/x86/rx86.py b/rpython/jit/backend/x86/rx86.py
--- a/rpython/jit/backend/x86/rx86.py
+++ b/rpython/jit/backend/x86/rx86.py
@@ -617,12 +617,17 @@
     CVTSS2SD_xb = xmminsn('\xF3', rex_nw, '\x0F\x5A',
                           register(1, 8), stack_bp(2))
 
-    # These work on machine sized registers, so MOVD is actually MOVQ
-    # when running on 64 bits.  Note a bug in the Intel documentation:
+    # These work on machine sized registers, so "MOVDQ" is MOVD when running
+    # on 32 bits and MOVQ when running on 64 bits.  "MOVD32" is always 32-bit.
+    # Note a bug in the Intel documentation:
     # http://lists.gnu.org/archive/html/bug-binutils/2007-07/msg00095.html
-    MOVD_rx = xmminsn('\x66', rex_w, '\x0F\x7E', register(2, 8), register(1), 
'\xC0')
-    MOVD_xr = xmminsn('\x66', rex_w, '\x0F\x6E', register(1, 8), register(2), 
'\xC0')
-    MOVD_xb = xmminsn('\x66', rex_w, '\x0F\x6E', register(1, 8), stack_bp(2))
+    MOVDQ_rx = xmminsn('\x66', rex_w, '\x0F\x7E', register(2, 8), register(1), 
'\xC0')
+    MOVDQ_xr = xmminsn('\x66', rex_w, '\x0F\x6E', register(1, 8), register(2), 
'\xC0')
+    MOVDQ_xb = xmminsn('\x66', rex_w, '\x0F\x6E', register(1, 8), stack_bp(2))
+
+    MOVD32_rx = xmminsn('\x66', rex_nw, '\x0F\x7E', register(2, 8), 
register(1), '\xC0')
+    MOVD32_xr = xmminsn('\x66', rex_nw, '\x0F\x6E', register(1, 8), 
register(2), '\xC0')
+    MOVD32_xb = xmminsn('\x66', rex_nw, '\x0F\x6E', register(1, 8), 
stack_bp(2))
 
     PSRAD_xi = xmminsn('\x66', rex_nw, '\x0F\x72', register(1), '\xE0', 
immediate(2, 'b'))
 
diff --git a/rpython/jit/backend/x86/test/test_rx86_32_auto_encoding.py 
b/rpython/jit/backend/x86/test/test_rx86_32_auto_encoding.py
--- a/rpython/jit/backend/x86/test/test_rx86_32_auto_encoding.py
+++ b/rpython/jit/backend/x86/test/test_rx86_32_auto_encoding.py
@@ -183,8 +183,11 @@
         g = open(inputname, 'w')
         g.write('\x09.string "%s"\n' % BEGIN_TAG)
         #
-        if instrname == 'MOVD' and self.WORD == 8:
-            instrname = 'MOVQ'
+        if instrname == 'MOVDQ':
+            if self.WORD == 8:
+                instrname = 'MOVQ'
+            else:
+                instrname = 'MOVD'
             if argmodes == 'xb':
                 py.test.skip('"as" uses an undocumented alternate encoding??')
         #
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to