Advertisement
Guest User

Untitled

a guest
Sep 11th, 2022
29
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 1.17 KB | None | 0 0
  1. -class CR3Operand(RegisterOperand):
  2. +class CR5Operand(RegisterOperand):
  3.      def spec(self, insn, record):
  4.          def merge(vector, value, span, spec, spec_span):
  5.              # this is silly these should be in a general base class,
  6. @@ -6,9 +6,13 @@
  7.              vshift = 4
  8.              sshift = 3
  9.              spshft = 2
  10. +            lsbshf = 0
  11. +            lsbmsk = (1<<lsbshf)-1
  12.  
  13. +            # record the 2 lsbs first
  14. +            lsbs = _SelectableInt(value=value.value&(lsbmsk), bits=lsbshf)
  15.              bits = (len(span) + len(spec_span))
  16. -            value = _SelectableInt(value=value.value, bits=bits)
  17. +            value = _SelectableInt(value=value.value>>lsbshf, bits=bits)
  18.              spec = _SelectableInt(value=spec.value, bits=bits)
  19.              if vector:
  20.                  value = ((value << vshift) | (spec<<spshft))
  21. @@ -17,4 +21,7 @@
  22.                  value = ((spec << sshift) | value)
  23.                  span = ((spshft * ('{0}',)) + spec_span + span)
  24.  
  25. +            # add the 2 LSBs back in
  26. +            v = (value.value << lsbshf) + lsbs.value
  27. +            value = _SelectableInt(value=v, bits=bits+lsbshf)
  28.              return (value, span)
  29.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement