PageRenderTime 26ms CodeModel.GetById 11ms RepoModel.GetById 0ms app.codeStats 0ms

/rpython/jit/backend/zarch/registers.py

https://bitbucket.org/timfel/pypy
Python | 54 lines | 39 code | 10 blank | 5 comment | 5 complexity | a6594291d7362e48dc6b30d629a9ad7e MD5 | raw file
Possible License(s): Apache-2.0, AGPL-3.0, BSD-3-Clause
  1. from rpython.jit.backend.zarch.locations import (FloatRegisterLocation,
  2. RegisterLocation, VectorRegisterLocation)
  3. registers = [RegisterLocation(i) for i in range(16)]
  4. fpregisters = [FloatRegisterLocation(i) for i in range(16)]
  5. vregisters = [VectorRegisterLocation(16+i) for i in range(16)]
  6. [r0,r1,r2,r3,r4,r5,r6,r7,r8,
  7. r9,r10,r11,r12,r13,r14,r15] = registers
  8. MANAGED_REGS = [r2,r3,r4,r5,r6,r7,r8,r9,r10,r11] # keep this list sorted (asc)!
  9. MANAGED_REG_PAIRS = [(r2,r3), (r4,r5), (r6,r7), (r8,r9), (r10,r11)]
  10. VOLATILES = [r2,r3,r4,r5,r6]
  11. SP = r15
  12. RETURN = r14
  13. POOL = r13
  14. SPP = r12
  15. SCRATCH = r1
  16. SCRATCH2 = r0
  17. GPR_RETURN = r2
  18. RES = r2
  19. RSZ = r11 # do not use a volatile register
  20. [f0,f1,f2,f3,f4,f5,f6,f7,f8,
  21. f9,f10,f11,f12,f13,f14,f15] = fpregisters
  22. # there are 4 float returns, but we only care for the first!
  23. FPR_RETURN = f0
  24. FP_SCRATCH = f15
  25. MANAGED_FP_REGS = fpregisters[:-1]
  26. VOLATILES_FLOAT = [f0,f1,f2,f3,f4,f5,f6,f7]
  27. MANAGED_VECTOR_REGS = vregisters
  28. # The JITFRAME_FIXED_SIZE is measured in words, and should be the
  29. # number of registers that need to be saved into the jitframe when
  30. # failing a guard, for example.
  31. ALL_REG_INDEXES = {}
  32. for _r in MANAGED_REGS:
  33. ALL_REG_INDEXES[_r] = len(ALL_REG_INDEXES)
  34. for _r in MANAGED_FP_REGS:
  35. ALL_REG_INDEXES[_r] = len(ALL_REG_INDEXES)
  36. # NOT used, but keeps JITFRAME_FIXED_SIZE even
  37. ALL_REG_INDEXES[f15] = len(ALL_REG_INDEXES)
  38. JITFRAME_FIXED_SIZE = len(ALL_REG_INDEXES)
  39. def odd_reg(r):
  40. assert r.value % 2 == 0
  41. return registers[r.value+1]
  42. def even_reg(r):
  43. assert r.value % 2 == 1
  44. return registers[r.value-1]