Author: Alex Gaynor <[email protected]>
Branch:
Changeset: r65534:6345a967f4df
Date: 2013-07-22 20:57 -0700
http://bitbucket.org/pypy/pypy/changeset/6345a967f4df/
Log: bextr operation cannot produce GC pointers
diff --git a/rpython/translator/c/gcc/trackgcroot.py
b/rpython/translator/c/gcc/trackgcroot.py
--- a/rpython/translator/c/gcc/trackgcroot.py
+++ b/rpython/translator/c/gcc/trackgcroot.py
@@ -478,7 +478,7 @@
'rep', 'movs', 'movhp', 'lods', 'stos', 'scas', 'cwde', 'prefetch',
# floating-point operations cannot produce GC pointers
'f',
- 'cvt', 'ucomi', 'comi', 'subs', 'subp' , 'adds', 'addp', 'xorp',
+ 'cvt', 'ucomi', 'comi', 'subs', 'subp', 'adds', 'addp', 'xorp',
'movap', 'movd', 'movlp', 'movup', 'sqrt', 'rsqrt', 'movhlp', 'movlhp',
'mins', 'minp', 'maxs', 'maxp', 'unpck', 'pxor', 'por', # sse2
'shufps', 'shufpd',
@@ -495,13 +495,15 @@
# sign-extending moves should not produce GC pointers
'cbtw', 'cwtl', 'cwtd', 'cltd', 'cltq', 'cqto',
# zero-extending moves should not produce GC pointers
- 'movz',
+ 'movz',
# locked operations should not move GC pointers, at least so far
'lock', 'pause',
# non-temporal moves should be reserved for areas containing
# raw data, not GC pointers
'movnt', 'mfence', 'lfence', 'sfence',
- ])
+ # bit manipulations
+ 'bextr',
+ ])
# a partial list is hopefully good enough for now; it's all to support
# only one corner case, tested in elf64/track_zero.s
@@ -741,7 +743,7 @@
# tail-calls are equivalent to RET for us
return InsnRet(self.CALLEE_SAVE_REGISTERS)
return InsnStop("jump")
-
+
def register_jump_to(self, label, lastinsn=None):
if lastinsn is None:
lastinsn = self.insns[-1]
@@ -1020,7 +1022,7 @@
visit_movl = visit_mov
visit_xorl = _maybe_32bit_dest(FunctionGcRootTracker.binary_insn)
-
+
visit_pushq = FunctionGcRootTracker._visit_push
visit_addq = FunctionGcRootTracker._visit_add
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit