[pypy-svn] r72401 - pypy/trunk/pypy/jit/backend/x86
fijal at codespeak.net
fijal at codespeak.net
Fri Mar 19 03:27:58 CET 2010
Author: fijal
Date: Fri Mar 19 03:27:56 2010
New Revision: 72401
Modified:
pypy/trunk/pypy/jit/backend/x86/assembler.py
pypy/trunk/pypy/jit/backend/x86/regalloc.py
Log:
kill lower_byte, use official interface instead
Modified: pypy/trunk/pypy/jit/backend/x86/assembler.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/x86/assembler.py (original)
+++ pypy/trunk/pypy/jit/backend/x86/assembler.py Fri Mar 19 03:27:56 2010
@@ -7,7 +7,7 @@
from pypy.rpython.lltypesystem.lloperation import llop
from pypy.rpython.annlowlevel import llhelper
from pypy.tool.uid import fixid
-from pypy.jit.backend.x86.regalloc import RegAlloc, WORD, lower_byte,\
+from pypy.jit.backend.x86.regalloc import RegAlloc, WORD,\
X86RegisterManager, X86XMMRegisterManager, get_ebp_ofs, FRAME_FIXED_SIZE,\
FORCE_INDEX_OFS
from pypy.rlib.objectmodel import we_are_translated, specialize
@@ -522,13 +522,14 @@
def _cmpop(cond, rev_cond):
def genop_cmp(self, op, arglocs, result_loc):
+ rl = result_loc.lowest8bits()
if isinstance(op.args[0], Const):
self.mc.CMP(arglocs[1], arglocs[0])
- getattr(self.mc, 'SET' + rev_cond)(lower_byte(result_loc))
+ getattr(self.mc, 'SET' + rev_cond)(rl)
else:
self.mc.CMP(arglocs[0], arglocs[1])
- getattr(self.mc, 'SET' + cond)(lower_byte(result_loc))
- self.mc.MOVZX(result_loc, lower_byte(result_loc))
+ getattr(self.mc, 'SET' + cond)(rl)
+ self.mc.MOVZX(result_loc, rl)
return genop_cmp
def _cmpop_float(cond, is_ne=False):
@@ -758,8 +759,9 @@
def genop_int_is_true(self, op, arglocs, resloc):
self.mc.CMP(arglocs[0], imm8(0))
- self.mc.SETNE(lower_byte(resloc))
- self.mc.MOVZX(resloc, lower_byte(resloc))
+ rl = resloc.lowest8bits()
+ self.mc.SETNE(rl)
+ self.mc.MOVZX(resloc, rl)
def genop_guard_bool_not(self, op, guard_op, addr, arglocs, resloc):
guard_opnum = guard_op.opnum
@@ -868,7 +870,7 @@
elif size == 2:
self.mc.MOV16(addr_add(base_loc, ofs_loc), value_loc)
elif size == 1:
- self.mc.MOV(addr8_add(base_loc, ofs_loc), lower_byte(value_loc))
+ self.mc.MOV(addr8_add(base_loc, ofs_loc), value_loc.lowest8bits())
else:
print "[asmgen]setfield addr size %d" % size
raise NotImplementedError("Addr size %d" % size)
@@ -886,7 +888,7 @@
scale_loc.value), value_loc)
elif scale_loc.value == 0:
self.mc.MOV(addr8_add(base_loc, ofs_loc, baseofs.value,
- scale_loc.value), lower_byte(value_loc))
+ scale_loc.value), value_loc.lowest8bits())
else:
raise NotImplementedError("scale = %d" % scale_loc.value)
@@ -896,7 +898,7 @@
self.cpu.translate_support_code)
assert itemsize == 1
self.mc.MOV(addr8_add(base_loc, ofs_loc, basesize),
- lower_byte(val_loc))
+ val_loc.lowest8bits())
def genop_discard_unicodesetitem(self, op, arglocs):
base_loc, ofs_loc, val_loc = arglocs
Modified: pypy/trunk/pypy/jit/backend/x86/regalloc.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/x86/regalloc.py (original)
+++ pypy/trunk/pypy/jit/backend/x86/regalloc.py Fri Mar 19 03:27:56 2010
@@ -1011,20 +1011,3 @@
# Returns (ebp-20), (ebp-24), (ebp-28)...
# i.e. the n'th word beyond the fixed frame size.
return -WORD * (FRAME_FIXED_SIZE + position)
-
-def lower_byte(reg):
- # argh, kill, use lowest8bits instead
- if isinstance(reg, MODRM):
- return reg
- if isinstance(reg, IMM32):
- return imm8(reg.value)
- if reg is eax:
- return al
- elif reg is ebx:
- return bl
- elif reg is ecx:
- return cl
- elif reg is edx:
- return dl
- else:
- raise NotImplementedError()
More information about the Pypy-commit
mailing list