		$B%^%7%s5-=RIt$N%$%s%?%U%'!<%9(B 2003 4/15


$B!{(B L-$B<0$X$N>pJs$NDI2C(B ---------------------------------------------------------

	& $B$G;O$^$kDI2C>pJs$r<($9%7%s%\%k(B (e.g. &info) $B$rDj$a!"(BS-$B<0(B
	$B$GI=$5$l$?>pJs(B (e.g. INFO) $B$H0l=o$K!"(BS-$B<0$N%j%9%H$N:G8e$KIU2C$9$k!#(B

	(op [type] args...    &info INFO)

	$B%7%U%HL?Na$J$I$N!V%b%G%#%U%!%$%"!W$O$3$NFC<l$J>l9g$H9M$($k!#(B
	$B0lHL$K$O0J2<$N$h$&$J7A$H$J$k!#(B $B$3$N>pJs$r(B $B!V(B&key-$BB0@-!W(B $B$H8@$&!#(B

	(op [type] args...   [& modifier]  {&key val}) 

$B!{(B def $B%U%)!<%`(B ---------------------------------------------------------------

	LIR $BEy4^$`(B S-$B<0(B $BI=8=$K$*$$$F!"0J2<$N%a%?$JI=8=(B($B%^%/%m(B)$B$rMQ0U$9$k!#(B

	(def <Symbol> <Sexp>)

	$B$3$l$O0J8e$N(B S-$B<0(B $BCf$N(B <Symbol> $B$r(B <Sexp> $B$GCV$-49$($k$3$H$r0UL#$9$k!#(B
	<Symbol> $B$r%^%/%mL>$H$$$&!#FCDj$N%^%/%mL>$O(B LIR $B$N!V30B&$N!W(B
	$B>pJs$N$d$j$H$j$K;H$o$l$k!#(B $B!z(Bnaming convention $B$r7h$a$k!#(B

$B!{(B $B%^%7%s0MB8>pJs4IM}It!)$H$N%$%s%?%U%'!<%9(B -----------------------------------

	class TMD {
	  // $B%^%7%s5-=R>pJs$rFI$_!"4XO"$9$k=hM}$r9T$J$&!#(B

	  TMD(String tmdfile) {
	    // tmdfile $B$rFI$_9~$`!#(B
	  }

	  String params() {
	    // tmdfile $B$+$iI,MW$J%^%7%s0MB8>pJs$r(B
	    // (def $B%7%s%\%k(B S-$B<0(B) ...
	    // $B$H$$$&7A$GJV$9!#(B
	    // $B$3$l$+$iM_$7$$>pJs$r;H$$$d$9$$7A$G(B Java $B$NJQ?t$K(B
	    // $B5-O?$9$k$N$O!"(BTMD $B%/%i%9$N;HMQ<T$,9T$J$&!#(B

	    // $B%l%8%9%?%"%m%1!<%7%g%s$J$I$K4X$9$k4pK\E*$J$b$N(B
	    // $B$N%7%s%\%kL>$ODj$^$C$F$$$k$,!"B>$KG$0U$KDI2C$7$F$h$$!#(B

	    // $B<B%l%8%9%?$N%j%9%H$rJ];}$9$k%7%s%\%kL>$O(B($B$H$j$"$($:(B)
	    // *real-reg-set* $B$H$9$k!#(B
	  }

	  String params(String sym) {
	    // params $B$HF1MM$@$,!"J8;zNs(B sym $B$G;XDj$7$?%7%s%\%k$NCM$N$_JV$9!#(B
	  }

	  String restra(String lfunction) {
	    // S-$B<0I=8=$N(B L $B4X?t$rFI$_!"!V%j%9%H%i!W$7$?$b$N$rJV$9!#(B
	  }

	  String instsel(String lfunction) {
	    // S-$B<0I=8=$N(B L $B4X?t$rFI$_!"%Q%?!<%s%^%C%A$7$?(B
	    // $B$b$N$r(B S-$B<0$H$7$FJV$9!#(B
	  }

	  void asmout(String lmodule, String outputfile) {
	    // S-$B<0I=8=$N%b%8%e!<%k$rFI$_!"(Boutputfile $B$X%"%;%s%V%i%3!<%I(B
	    // $B$r=PNO$9$k!#(B ($B!z$3$l$O;CDjE*$J$b$N(B)

	}

$B!{(B $BL?NaA*Br7k2L$NI=8=(B ---------------------------------------------------------

	$B!z%^%C%A$7$?%Q%?!<%s$N5-O?$O!"%l%8%9%?%"%m%1!<%?$G$OITMQ$J$N$G!"(B
	$B:#$OF~$l$J$$$3$H$K$7$F$$$k!#(B
	

	$B%^%C%A$7$?%F%s%W%l!<%H$H0J2<$N$h$&$J%l%8%9%?@)Ls$r(B
	L $B<0$N(B &match $BB0@-$H$7$FI=$9!#(B
	$B$3$3$K(B <$B%F%s%W%l!<%HL>(B> $B$O%^%C%A$7$?%F%s%W%l!<%H$NL>A0!#(B

	(op [type] args...   &match <$B%F%s%W%l!<%HL>(B>)

	$B%l%8%9%?$N@)Ls$O(B L-$B4X?t$N(B SYMTAB $B$N3F2>A[%l%8%9%?$N%(%s%H%j$K(B
	&regset $BB0@-$H$7$FIU2C$9$k!#(B
	$BNc(B:

	(FUNCTION
	  (SYMTAB
	    ("v1" I32 0  &regset  ( {<$B<B%l%8%9%?(B>} ))
	    .....
	    ))

		<$B<B%l%8%9%?(B>     ::= <SimpleRegExp> | <SubRegExp>

	$B0UL#$O(B vi$B":(B{$B<B%l%8%9%?(B...} $B$G$"$k!#>-MhE*$K$O$h$jJ#;($J@)Ls(B
	$B$,I,MW$K$J$k$H;W$o$l$k$,!":G=i$NL\I8$G$"$k(B SPARC $B$N%3!<%I@8@.(B
	$B$^$G$O!"$3$NI=8=$K$H$I$a$F$*$/!#(B

	$BNc(B:

	(SET I32
		(MEM I32 (FRAME I32 "i"))
		(ADD I32 (CONVSX I32 (MEM I8 (FRAME I32 "c")))
		     (INTCONST I32 4)))

	$B$KBP$9$kL?NaA*Br7k2L(B

	(SET I32 (REG I32 "v1")
		 (CONVSX I32 (MEM I8 (FRAME I32 "c" &match R13)) &match R8)
		 &match-reg #t)

	(SET I32 (REG I32 "v2")
		 (ADD I32 (REG I32 "v1")
		          (INTCONST I32 4 &match R16) &match R7)
		 &match-reg #t)

	(SET I32 (MEM I32 (FRAME I32 "i" &match R13))
		 (REG I32 "v2")
		 &match R3)

	Rn $B$O%^%C%A$7$?%k!<%kL>(B($B8e=R(B)$B!#(B&match-reg $BB0@-$b%3!<%I=PNOIt$G(B
	$BI,MW$J>pJs$J$N$G>C$7$F$O$J$i$J$$!#(B

$B!{(B $B%^%7%s5-=R(B -----------------------------------------------------------------

	$B%^%7%s5-=R$O(B .tmd $B$H$$$&3HD%;R$r$b$D%U%!%$%k$K0J2<$N$b$N$r(B
	$BDj5A$9$k$3$H$G9T$J$&!#(B

	<defreg> ::= (defreg <regsetname> {<$B<B%l%8%9%?(B>})
	<regsetname> ::= <Symbol>

	$BNc(B:
		(defreg reg-g ((REG I32 "r1") (REG I32 "r2")))
		(defreg reg-x ((REG I32 "r3") (REG I32 "r4")))
		(defreg reg-s ((REG I32 "fp") (REG I32 "pc")))

	<regsetname> $B$O<!$NL?Na%Q%?!<%s5-=R$N(B non terminal $B$H$7$F8=$l!"(B
	$BL?NaA*BrIt$,%l%8%9%?$rI=$95-9f$+$I$&$+$rCN$kL\E*!"(B
	$B5Z$S%l%8%9%?%"%m%1!<%?$XEO$9%l%8%9%?@)Ls>pJs$rF@$k$?$a$K;H$o$l$k!#(B


	<defrule> ::= (defrule < <nonterm> | (<nonterm> <rulename>) >
			<pattern>
			[(asm <$-exp>)]
			[(cost <$-exp>)]
			[(cond {<regcond>})]
			)

	<nonterm> ::= <Symbol>
	<rulename>::= <Symbol>
	<pattern> ::= <nonterm> | $B!VItJ,<0$N0lIt$,(B <nonterm> $B$N(B L-$B<0!W(B
	<$-exp>   ::= i $BHVL\$N(B nonterm $B$r;2>H$9$k(B<$-var>$BJQ?t$r4^$`(B Scheme $B<0(B
	<$-var>   ::= $< 0 | 1 | 2 ... >
	<regcond> ::= (eq <$-var> <$-var>) | (ne <$-var> ($-var))

	$BNc(B:
		(defrule disp (ADD I32 reg-g con)
		  (asm `(disp ,$1 ,$2))
		  (cost 1))

	disp $B$r(B non terminal $B$H$9$k%Q%?!<%s!#(B<rulename> $B$N;XDj$,$J$$>l9g$O(B
	n $BHGL\$N%k!<%k$K$D$$$F(B Rn $B$H$$$&L>A0$,IU$1$i$l$k!#(B
	reg-g $B$KBP1~$9$k<B%l%8%9%?$O(B defreg $B$GDj5A$5$l$?$b$N$+$iA*$V!#(B
	$B$3$NNc$G$O(B <$-var> $B$O(B defrule $B$N:8$+$i(B non term $B$N=P8==g$K(B
	$0=disp $1=reg-g $2=con $B$HBP1~$9$k!#(B

		(defrule reg-x (MUL I32 reg-x reg-x)
		  (asm `(add2 ,$1 ,$2))
		  (cost 1)
		  (cond (eq $0 $1)))

	$B$3$l$O(B 2 $B%*%Z%i%s%IL?Na$NNc$G!"7k2L$HBh0l0z?t$,F10l$N(B
	reg-x $B%l%8%9%?$G$J$1$l$P$J$i$J$$$3$H$r<($9!#(B
	$B$J$*(B eq $B@)Ls$K$D$$$F$OL?NaA*BrIt$G2r>C$7!"(Bne $B@)Ls$K$D$$$F$O(B
	$B%l%8%9%?!<%"%m%1!<%?$,2r>C$9$k!#(B
		  
	<$-var> $B$,BP1~$9$k(B L $B<0$,Dj?t$J$i$=$NCM(B ($BNc$($P(B (INTCONST I32 9)
	$B$J$i(B 9)$B!"(BFRAME $B<0$J$i%U%l!<%`$N%*%U%;%C%H!"(BREG $B<0$J$i$=$NL>A0$,(B
	$BBP1~$9$k!#(B

	Atomic $B$J(B L-$B<0$O%^%C%A%s%0$K4X$7$F$O%3!<%I$H7?$N$_$,4X78$9$k!#(B
	$BNc$($P0J2<$O>.$5$$@0?tDj?t$N%Q%?!<%s5-=RNc$G$"$k!#(B

		(defrule con-small (INTCONST I32 *)
			(cost (if (<= 0 $0 255) 0 *infinity-cost*)))

	$B$3$3$G%Q%?!<%s<+BN$OG$0U$N(B I32 $B$N(B INTCONST $B$K%^%C%A$9$k(B (* $B$O%@%_!<(B)
	$B$,(B cost $B<0$K$h$j(B 0 .. 255 $B$K$N$_%^%C%A$9$k!#(B
