        ;; lisp namespace operation
        (:VM_BIND lispval-symbol)	;; bind stack-top value to symbol(operand)
        (:VM_UNBIND integer) ;; unbind symbol(operand)
-       (:VM_VREF lispval-symbol)	  ;; refer value of symbol(operand)
-       (:VM_VSET lispval-symbol)	  ;; overwrite symbol(operand) by %val
+       (:VM_VREF lispval-symbol)	;; refer value of symbol(operand)
+       (:VM_VSET lispval-symbol)	;; overwrite symbol(operand) by %val
+       (:VM_VINC lispval-symbol)	;; increment value of symbol(operand)
+       (:VM_VDEC lispval-symbol)	;; increment value of symbol(operand)
 
        ;; basic arithmetic operation
        (:VM_LT nil)	;; (< <%val> <stack-top>)

	       ~@(compile-pass1 else-body)
	       ~end-label))
          ;;
          ('cond)
          `((:VM_IVAL ~(make-nil)))
          ;;
          ('cond clause & clauses)
          (let [end-label (gensym),
                clauses-insts
                (apply concat
                       (map (fn [clause]
                              (let [pred (first clause)
                                    body (rest clause)
                                    next-clause-label (gensym)]
                                `(~@(compile-pass1 pred)
                                  (:VM_BIFN ~next-clause-label)
                                  ~@(apply concat
                                           (map compile-pass1 body))
                                  (:VM_JMP ~end-label)
                                  ~next-clause-label)))
                            (cons clause clauses)))]
            `(~@clauses-insts
              ~end-label))
	  ;;
          ('and)
          `((:VM_IVAL ~(make-t)))

                                    (:VM_POP)))
	  ;;
	  ('dotimes (var num) & body)
          (compile-dotimes var num body)
	  
	  ;;
	  _	(compile-funcall (first exp) (rest exp)))
   ;;
