anchor.diff:       (set-zf-on-op (set-sf-on-op (setf ,dest (logxor ,src ,dest)) ,is-word))
        (setf (flag-p :cf) nil)))
   
  +(defmacro parse-group1-byte (opcode operation mod-bits r/m-bits)
  +  `(case (mod ,opcode 4)
  +    (0 (,operation (next-instruction) (indirect-address ,mod-bits ,r/m-bits nil) nil))
  +    (1 (,operation (next-word) (indirect-address ,mod-bits ,r/m-bits t) t))
  +    (3 (,operation (sign-extend (next-instruction)) (indirect-address ,mod-bits ,r/m-bits t) t))))
  +
  +(defmacro parse-group1-opcode (opcode)
  +  `(with-mod-r/m-byte
  +     (case reg-bits
  +       (0 (parse-group1-byte ,opcode add-without-carry mod-bits r/m-bits))
  +       (1 (parse-group1-byte ,opcode or-operation mod-bits r/m-bits))
  +       (2 (parse-group1-byte ,opcode add-with-carry mod-bits r/m-bits))
  +       (3 (parse-group1-byte ,opcode sub-with-borrow mod-bits r/m-bits))
  +       (4 (parse-group1-byte ,opcode and-operation mod-bits r/m-bits))
  +       (5 (parse-group1-byte ,opcode sub-without-borrow mod-bits r/m-bits))
  +       (6 (parse-group1-byte ,opcode xor-operation mod-bits r/m-bits))
  +       (7 (parse-group1-byte ,opcode cmp-operation mod-bits r/m-bits)))))
  +
   ;;; Opcode parsing
   
   (defun in-paired-byte-block-p (opcode block)
     (= (truncate (/ opcode 2)) (/ block 2)))
  +
  +(defun in-4-byte-block-p (opcode block)
  +  (= (truncate (/ opcode 4)) (/ block 4)))
   
   (defun in-8-byte-block-p (opcode block)
     (= (truncate (/ opcode 8)) (/ block 8)))
  
positive.code:   (if (negative-p value is-word)
        (- (1+ (logxor value (if is-word #xffff #xff))))
        value))
  
  ;;; setf-able locations
  
  
negative.code:   "Reverse a little-endian number."
    (+ low (ash high 8)))
  
  (defun negative-p (value is-word)
    (if is-word (>= value #x8000) (>= value #x80)))
  
  