Advertisement
Guest User

Untitled

a guest
Sep 11th, 2022
27
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 1.38 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,15 +6,22 @@
  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. -                span = (span[0:3] + spec_span + ('{0}', '{0}') + span[3:5])
  22. +                span = (span[0:3] + spec_span + spshft*('{0}',) + span[3:5])
  23.              else:
  24.                  value = ((spec << sshift) | value)
  25. -                span = (('{0}', '{0}') + spec_span + span)
  26. +                span = (spshft*('{0}',) + spec_span + span)
  27.  
  28. +            # add the 2 LSBs back in
  29. +            v = (value.value << lsbshf) + lsbs.value
  30. +            value = _SelectableInt(value=v, bits=bits+lsbshf)
  31.              return (value, span)
  32.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement