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