anchor.diff:  												(sllv  #b000100) (slt   #b101010) (sltu  #b101011) (srav  #b000111) (srlv  #b000110)
   												(sub   #b100010) (subu  #b100011) (xor   #b100110)))
   
  -;;
  -;; Type 2 instructions 
  -;; <operand> <register>, <immediate> 
  -;;
  +(make-ee-instructions (make-encoding :spec #b011100 :fixed #b001000 :inst 0 :rs 21 :rt 16 :rd 11 :func #'inst-type1)
  +											'((paddb  #b01000) (paddh  #b00100) (paddsb #b11000) (paddsh #b10100) (paddsw #b11000)
  +												(paddw  #b00100) (pcgtb  #b01010) (pcgth  #b00110) (pcgtw  #b00100) (pext5  #b11110)
  +												(pextlb #b11010) (pextlh #b10110) (pextlw #b10010) (pmaxh  #b00111) (pmaxw  #b00011)
  +												(ppac5  #b11111) (ppacb  #b11011) (ppach  #b10111) (ppacw  #b10011) (psubb  #b01001)
  +												(psubh  #b00101) (psubsb #b11001) (psubsh #b10101) (psubsw #b10001) (psubw  #b00001)))
  +
  +(make-ee-instructions (make-encoding :spec #b011100 :fixed #b101000 :inst 0 :rs 21 :rt 16 :rd 11 :func #'inst-type1)
  +											'((pabsh  #b00101) (pabsw  #b00001) (paddub #b11000) (padduh #b10100) (padduw #b10000)
  +												(padsbh #b00100) (pceqb  #b01010) (pceqh  #b00110) (pceqw  #b00010) (pextub #b11010)
  +												(pextuh #b10110) (pextuw #b10010) (pminh  #b00111) (pminw  #b00011) (psubub #b11001)
  +												(psubuh #b10101) (psubuw #b10001) (qfsrv  #b11011)))
  +
  +(make-ee-instructions (make-encoding :spec #b011100 :fixed #b001001 :inst 0 :rs 21 :rt 16 :rd 11 :func #'inst-type1)
  +											'((pand   #b10010) (pcpyld #b01110) (pdivbw #b11101) (pexeh  #b11010) (pexew  #b11110)
  +												(phmadh #b10001) (phmsbh #b10101) (pinth  #b01010) (pmaddh #b10000) (pmaddw #b00000)
  +												(pmfhi  #b01000) (pmflo  #b01001) (pmsubh #b10100) (pmsubw #b00100) (pmulth #b11100)
  +												(pmultw #b01100) (prevh  #b11011) (prot3w #b11111) (psllvw #b00010) (psrlvw #b00011)
  +												(pxor   #b01001)))
  +
  +(make-ee-instructions (make-encoding :spec #b011100 :fixed #b101001 :inst 0 :rs 21 :rt 16 :rd 11 :func #'inst-type1)
  +											'((pcpyh  #b11001) (pcpyud #b01110) (pdivw  #b01101) (pdivuw #b01001) (pexch  #b11010)
  +												(pexcw  #b11110) (pinteh #b01010) (pmadduw #b00000) 
  +												(psllh #b111100) (psllw #b111101) (psravw #b111101) (psrlh #b111101) (psrlvw #b111101)
  +												(psrlw #b111101)))
   
   (make-ee-instructions (make-encoding :spec 1 :inst 16 :rs 21 :imm 0 :func #'inst-type2)
   											'((bgez #b00001) (bgezal #b10001) (bgezall #b10011) (bgezl #b00011)
  
positive.code: 
  ; info about how to encode the function
  
  (defstruct encoding inst spec rd rs rt imm func)
  
  ;; binds and valdiats rt and rs
  
  
negative.code: 		(write-value stream (logior (ash instruction (encoding-inst enc)) 
  																(ash rs (encoding-rs enc))
  																(ash rt (encoding-rt enc))
  																(ash (logand (nth 3 arguments) #xffff) (encoding-imm enc))) 4)))
  
  ;;; instruction type 1
  ;;; 
  ;;; <operand> <register>, <register>, <register> 
  ;;;
  
  (defun inst-type1 (stream instruction arguments enc) 
  	(when (not (equal (length arguments) 4))
  		(error (format nil "Expected 4 arguments si-type <operand> rd, rs, rt, was given ~{~a~^, ~}" arguments)))
  	(multiple-value-bind (rd rs rt) (validate-rd-rt-rs arguments)
  		(write-value stream (logior (ash (encoding-spec enc) 26) 
  																(ash (encoding-fixed enc) 0)
  																(ash rs (encoding-rs enc))
  																(ash rt (encoding-rt enc))
  																(ash rd (encoding-rd enc))
  