anchor.diff:              (movzx src-scale 2))
           (movzx src-scale dest-scale))))
   
  -(defun emit-clear (out reg)
  +(define (emit-clear out reg)
     (emit-xor out reg reg 2))
   
   (define (emit-push out reg)
  
positive.code: 
  ;;; Registers
  
  (defun usual-register (reg)
    (funcall reg value-scale))
  
  (defmacro define-register (name &rest variants)
    `(defvar ,name (lambda (scale) (elt ',variants scale))))
  
  (define-register %a "%al" "%ax" "%eax" "%rax")
  
negative.code: (define (emit-jump out label)
    (emit out "jmp ~A" label))
  
  (define (emit-branch out cc conddest)
    (emit out "j~A ~A" (negate-cc cc) (cdr conddest))
    (emit-jump out (car conddest)))
  
  (define (emit-set out cc reg)
    (emit out "set~A ~A" cc (funcall reg 0)))
  
  (defmarco (define-insn-1 name insn)
    `(define (,name out oper . scale)
       (emit-insn-1 out ,insn oper (and scale (car scale)))))
  
  (define (emit-insn-1 insn oper scale)
    (unless scale
      (setq scale value-scale))
    (emit out "~A~A ~A" insn (elt insn-size-suffix scale) (funcall oper scale)))
  