  ;;Multiplication
 (defmethod munchMap [:minijava.ir/BinaryOp :* :minijava.ir/Const  :minijava.exp/expression]
  [exp op rand1 rand2]       
-  (let [d (Temp (minijava.ir.temp.Temp.)) ]
+  (let [d (tm/temp) ]
   		 	(emit (movl  (CONST (:val rand1)) d))
         (emit (imull  (munch rand2) d  ))
                     d))
 
 (defmethod munchMap [:minijava.ir/BinaryOp :* :minijava.exp/expression :minijava.ir/Const ] 
   [exp op rand1 rand2]    
-  (let [d (Temp (minijava.ir.temp.Temp.)) ]
+  (let [d (tm/temp) ]
   		 	(emit (movl  (munch rand1) d))
         (emit (imull (CONST (:val rand2)) d))
                     d))

  [x op exp1 exp2] 	
  	(let [e1 (munch exp1)
  			  e2 (munch exp2)
  			  d (Temp (minijava.ir.temp.Temp.))]
  			 	(emit (movl  e2 d))
  			 	(emit (subl  e1 d))
  			  d))

  (defmethod munchMap [:minijava.ir/Mem :minijava.exp/expression]
  [x adr] 	
  	;;Mem(addr) -> Movl [adr] Temp 
  	(let [d (tm/temp)
  	  		s (munch adr)]  				
  				 (emit (movl s d))
  				 d)) ;;Since Mem is an expression, it returns a temp.

(defmethod munchMap [:minijava.ir/Temp :minijava.temp/Temp]
  [exp temp]
  exp) ;;Leave temps alone

