anchor.diff:  (define-pure-operator (raw-vec-address vec index) result ()
     (let* ((tag (attr-ref attrs 'tag))
            (scale (attr-ref attrs 'scale)))
  -    (unless (= scale number-tag-bits)
  -      (emit-sar out (immediate (- number-tag-bits scale)) index))
  +    (emit-scale-number out scale index)
       (emit-lea out (dispmem tag value-size vec index) result)))
   
   (define-pure-operator (vec-ref vec index) result ()
     (let* ((tag (attr-ref attrs 'tag))
            (scale (attr-ref attrs 'scale)))
  -    (unless (= scale number-tag-bits)
  -      (emit-sar out (immediate (- number-tag-bits scale)) index))
  +    (emit-scale-number out scale index)
       (emit-movzx out (dispmem tag value-size vec index) result scale)))
   
   (define-operator (vec-set! vec index val) val ()
     (let* ((tag (attr-ref attrs 'tag))
            (scale (attr-ref attrs 'scale)))
  -    (unless (= scale number-tag-bits)
  -      (emit-sar out (immediate (- number-tag-bits scale)) index))
  +    (emit-scale-number out scale index)
       (emit-mov out val (dispmem tag value-size vec index) scale)))
   
   (define-reg-use (vec-copy attrs src-addr dst-addr len)
  
positive.code:         (emit-lea out (dispmem 0 tag %alloc) result))
        (begin
          (emit-mov out len raw-len)
          (emit-sar out (immediate (- number-tag-bits scale)) raw-len)
          (emit-sub out (immediate value-size) %alloc)
          (emit-sub out raw-len %alloc)
          (emit-and out (immediate allocation-alignment-mask) %alloc)
  
negative.code:         (emit-idiv out %c)
          (emit-convert-value out %d dest in-frame-base out-frame-base))))
  
  (define (emit-scale-number out scale oper)
    (unless (= scale number-tag-bits)
      (if (< scale number-tag-bits)
          (emit-sar out (immediate (- number-tag-bits scale)) oper)
          (emit-shl out (immediate (- scale number-tag-bits)) oper))))
  
  ;;; Strings and vectors
  
  (define-tag-check string? string-tag string-tag-bits)
  