anchor.diff:        (sicl-mir:register-location
          (etypecase output
   	 (sicl-mir:register-location
  -	  (format stream "     MOV ~a, [~a ~d]~%"
  -		  (sicl-mir:name output)
  -		  (sicl-mir:name input)
  -		  displacement))
  -	 (sicl-mir:dynamic-location
  -	  (format stream "     MOV RAX, [~a ~d]~%"
  -		  (sicl-mir:name input)
  -		  displacement)
  -	  (format stream "     MOV [RBP ~d], RAX~%"
  -		  (* -8 (1+ (sicl-mir:index output)))))))
  +	  (add-code "MOV"
  +		    (list (make-reg output)
  +			  (make-mem input displacement))))
  +	 (sicl-mir:dynamic-location
  +	  (add-code "MOV"
  +		    (list (make-reg 'rax)
  +			  (make-mem input displacement)))
  +	  (add-code "MOV"
  +		    (list (make-mem 'rbp (* -8 (1+ (sicl-mir:index output))))
  +			  (make-reg 'rax))))))
         (sicl-mir:dynamic-location
          (etypecase output
   	 (sicl-mir:register-location
  -	  (format stream "     MOV RAX, [RBP ~d]~%"
  -		  (* -8 (1+ (sicl-mir:index input))))
  -	  (format stream "     MOV ~a, [RAX ~d]~%"
  -		  (sicl-mir:name output)
  -		  displacement))
  -	 (sicl-mir:dynamic-location
  -	  (format stream "     MOV RAX, [RBP ~d]~%"
  -		  (* -8 (1+ (sicl-mir:index input))))
  -	  (format stream "     MOV RAX, [RAX ~d]~%"
  -		  displacement)
  -	  (format stream "     MOV [RBP ~d], RAX~%"
  -		  (* -8 (1+ (sicl-mir:index output))))))))))
  +	  (add-code "MOV"
  +		    (list (make-reg 'rax)
  +			  (make-mem 'rbp (* -8 (1+ (sicl-mir:index input))))))
  +	  (add-code "MOV"
  +		    (list (make-reg output)
  +			  (make-mem 'rax displacement))))
  +	 (sicl-mir:dynamic-location
  +	  (add-code "MOV"
  +		    (list (make-reg 'rax)
  +			  (make-mem 'rbp (* -8 (1+ (sicl-mir:index input))))))
  +	  (add-code "MOV"
  +		    (list (make-reg 'rax)
  +			  (make-mem 'rax displacement)))
  +	  (add-code "MOV"
  +		    (list (make-mem 'rbp (* -8 (1+ (sicl-mir:index output))))
  +			  (make-reg 'rax)))))))))
   
   (defun generate-code (first-instruction)
     (let ((*label-table* (make-hash-table :test #'eq))
  -	(*processed-p-table* (make-hash-table :test #'eq)))
  -    (generate-instruction first-instruction *standard-output*)))
  +	(*processed-p-table* (make-hash-table :test #'eq))
  +	(*assembly-program* '()))
  +    (generate-instruction first-instruction *standard-output*)
  +    (x86-assembler:assemble (reverse *assembly-program*))))
         
  
positive.code:       (sicl-mir:immediate-input
         (etypecase input2
  	 (sicl-mir:register-location
  	  (format stream "     CMP ~a, ~d~%"
  		  (sicl-mir:name input2)
  		  (sicl-mir:value input1))
  	  (assign-label (cadr successors))
  	  (format stream "     JL ~a~%"
  		  (gethash (cadr successors) *label-table*)))
  	 (sicl-mir:dynamic-location
  	  (format stream "     CMP [RBP ~d], ~d~%"
  		  (* -8 (1+ (sicl-mir:index input2)))
  		  (sicl-mir:value input1))
  	  (assign-label (cadr successors))
  	  (format stream "     JNL ~a~%"
  		  (gethash (cadr successors) *label-table*)))))
        (sicl-mir:register-location
         (etypecase input2
  	 (sicl-mir:immediate-input
  	  (format stream "     CMP ~a, ~d~%"
  		  (sicl-mir:name input1)
  		  (sicl-mir:value input2))
  	  (assign-label (cadr successors))
  	  (format stream "     JNL ~a~%"
  		  (gethash (cadr successors) *label-table*)))
  	 (sicl-mir:register-location
  	  (format stream "     CMP ~a, ~a~%"
  		  (sicl-mir:name input1)
  		  (sicl-mir:name input2))
  	  (assign-label (cadr successors))
  	  (format stream "     JNL ~a~%"
  		  (gethash (cadr successors) *label-table*)))
  	 (sicl-mir:dynamic-location
  	  (format stream "     CMP ~a, [RBP ~d]~%"
  		  (sicl-mir:name input1)
  		  (* -8 (1+ (sicl-mir:index input2))))
  	  (assign-label (cadr successors))
  	  (format stream "     JNL ~a~%"
  		  (gethash (cadr successors) *label-table*)))))
        (sicl-mir:dynamic-location
         (etypecase input2
  	 (sicl-mir:immediate-input
  	  (format stream "     CMP [RBP ~d], ~d~%"
  		  (* -8 (1+ (sicl-mir:index input2)))
  		  (sicl-mir:value input1))
  	  (assign-label (cadr successors))
  	  (format stream "     JNL ~a~%"
  		  (gethash (cadr successors) *label-table*)))
  	 (sicl-mir:register-location
  	  (format stream "     CMP [RBP ~d], ~a~%"
  		  (* -8 (1+ (sicl-mir:index input2)))
  		  (sicl-mir:name input1))
  	  (assign-label (cadr successors))
  	  (format stream "     JNL ~a~%"
  		  (gethash (cadr successors) *label-table*)))
  	 (sicl-mir:dynamic-location
  	  (format stream "     MOV RAX, [RBP ~d]~%"
  		  (* -8 (1+ (sicl-mir:index input1))))
  	  (format stream "     CMP RAX, [RBP ~d]~%"
  		  (* -8 (1+ (sicl-mir:index input2))))
  	  (assign-label (cadr successors))
  	  (format stream "     JNL ~a~%"
  		  (gethash (cadr successors) *label-table*))))))))
  
  (defmethod generate-instruction
      ((instruction sicl-mir:s<=-instruction) stream)
  
negative.code:     (assign-label instruction))
    (let ((label (gethash instruction *label-table*)))
      (unless (null label)
        (add-item label)))
    (setf (gethash instruction *processed-p-table*) t))
  
  (defmethod generate-instruction :after (instruction stream)
  