File: support.py

package info (click to toggle)
pypy3 7.3.19%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 212,236 kB
  • sloc: python: 2,098,316; ansic: 540,565; sh: 21,462; asm: 14,419; cpp: 4,451; makefile: 4,209; objc: 761; xml: 530; exp: 499; javascript: 314; pascal: 244; lisp: 45; csh: 12; awk: 4
file content (36 lines) | stat: -rw-r--r-- 922 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
from rpython.rtyper.lltypesystem import llmemory
from rpython.rlib.rarithmetic import r_uint, intmask

def adr2int(addr):
    """
    Cast an address to an int.

    Returns an AddressAsInt object which can be cast back to an address.
    """
    return llmemory.cast_adr_to_int(addr, "symbolic")

def int2adr(int):
    """
    Cast an int back to an address.

    Inverse of adr2int().
    """
    return llmemory.cast_int_to_adr(int)

def ptr2int(ptr):
    """
    Cast a pointer to int.

    Returns an AddressAsInt object.
    """
    addr = llmemory.cast_ptr_to_adr(ptr)
    return llmemory.cast_adr_to_int(addr, "symbolic")
ptr2int._annspecialcase_ = 'specialize:arglltype(0)'

def int_signext(value, numbytes):
    b8 = numbytes * 8
    a = r_uint(value)
    a += r_uint(1 << (b8 - 1))     # a += 128
    a &= r_uint((1 << b8) - 1)     # a &= 255
    a -= r_uint(1 << (b8 - 1))     # a -= 128
    return intmask(a)