<bin>:  ADD<tw> add | SUB<tw> sub | LSHI sll | LSHU sll | RSHU srl | RSHI sra
<binf>: ADD add | SUB sub | MUL mul | DIV div
<bit>:  BAND and | BOR or
<con>:  CNST "%a" | I0 0 | I1 1 | I2 2 | I3 3
<eql>:  EQ e | NE ne
<mov>:  CVIC x | CVIS x | CVIU x | CVUC x | CVUS x | CVUI x | CVPU x | CVUP x | INDIRB x
<mov>:  LOADC x | LOADS x | LOADI x | LOADP x | LOADU x | LOADB x
<mul>:  DIVI div | DIVU udiv | MODI rem | MODU urem | MULI mul | MULU umul
<rel>:  GT g | GE ge | LT l | LE le
<relf>: EQ ue | NE ne | GT ug | GE uge | LT ul | LE ule
<tf2>:  F "s" | D d
<tf>:   F "" | D d
<ti>:   I "" | P "" | U "" | C b | S h
<tl>:   I "" | P "" | U "" | C sb | S sh
<tw>:   I "" | P "" | U ""
<ty>:   F "" | D d | I "" | P "" | U "" | C b | S h
acon:   ADDRGP                          "%a"
acon:   con                             "%0"
addr:   ADD<tw>(reg,rc)                 "[%%%0+%1]"
addr:   ADDRFP                          "[%%%fp+%a]"
addr:   ADDRLP                          "[%%%fp+%a]"
addr:   acon                            "[%0]"
addr:   reg                             "[%%%0]"
ar:     acon                            "%0"
ar:     reg                             "%%%0"
con:    <con><ti>                       "%a"
rc:     con                             "%0"
rc:     reg                             "%%%0"
reg:    <bin>(reg,rc)           1       "<1> %%%0,%1,%%%c\n"
reg:    <binf><tf2>(reg,reg)    1       "<1><2> %%f%0,%%f%1,%%f%c\n"
reg:    <bit>U(reg,BCOMU(rc))   1       "<1>n %%%0,%%%1,%%%c\n"
reg:    <bit>U(reg,rc)          1       "<1> %%%0,%%%1,%%%c\n"
reg:    <mov>(reg)              1       "mov %%%0,%%%c\n"
reg:    <mul>(reg,reg)          1       "mov %%%1,%%o1; call .<1>,2; mov %%%0,%%o0; mov %%o0,%%%c\n"
reg:    ADDRGP                  1       "set %a,%%%c\n"
reg:    BCOMU(reg)              1       "not %%%0,%%%c\n"
reg:    BXORU(reg,BCOMU(rc))    1       "xnor %%%0,%%%1,%%%c\n"
reg:    BXORU(reg,rc)           1       "xor %%%0,%%%1,%%%c\n"
reg:    CALLD(ar)               2       "call %0; nop\n"
reg:    CALLF(ar)               2       "call %0; nop\n"
reg:    CALLI(ar)               2       "call %0; nop\n"
reg:    CVCI(INDIRC(addr))      1       "ldsb %0,%%%c\n"
reg:    CVCI(reg)               1       "sll %%%0,24,%%g1; sra %%g1,24,%%%c\n"
reg:    CVCU(INDIRC(addr))      1       "ldub %0,%%%c\n"
reg:    CVCU(reg)               1       "and %%%0,0xff,%%%c\n"
reg:    CVDF(reg)               1       "fdtos %%f%0,%%f%c\n"
reg:    CVDI(reg)               1       "fdtoi %%f%0,%%f0; st %%f0,[%%sp+64]; ld [%%sp+64],%%%c\n"
reg:    CVFD(reg)               1       "fstod %%f%0,%%f%c\n"
reg:    CVID(reg)               1       "st %%%0,[%%sp+64]; ld [%%sp+64],%%f%c; fitod %%f%c,%%f%c\n"
reg:    CVSI(INDIRS(addr))      1       "ldsh %0,%%%c\n"
reg:    CVSI(reg)               1       "sll %%%0,16,%%g1; sra %%g1,16,%%%c\n"
reg:    CVSU(INDIRS(addr))      1       "lduh %0,%%%c\n"
reg:    CVSU(reg)               1       "set 0xffff,%%g1; and %%%0,%%g1,%%%c\n"
reg:    I0<ti>                          "# reg\n"
reg:    INDIR<tf>(addr)         1       "ld<1> %0,%%f%c\n"
reg:    INDIR<tl>(addr)         1       "ld<1> %0,%%%c\n"
reg:    INDIR<ty>(VREGP)                "# reg\n"
reg:    LOADD(reg)              1       "# LOADD\n"
reg:    LOADF(reg)              1       "fmovs %%%0,%%%c\n"
reg:    NEGD(reg)               1       "# NEGD\n"
reg:    NEGF(reg)               1       "fnegs %%f%0,%%f%c\n"
reg:    NEGI(reg)               1       "neg %%%0,%%%c\n"
reg:    con                     1       "set %0,%%%c\n"
stmt:   <eql><tw>(reg,rc)       1       "cmp %%%0,%1; b<1> %a; nop\n"
stmt:   <rel>I(reg,rc)          1       "cmp %%%0,%1; b<1> %a; nop\n"
stmt:   <rel>U(reg,rc)          1       "cmp %%%0,%1; b<1>u %a; nop\n"
stmt:   <relf><typef>(reg,reg)  1       "fcmpe<2> %%%f0,%%%f1; nop; fb<1> %a; nop\n"
stmt:   ARG<tw>(reg)            1       "st<1> %%%0,[%%sp+4*%c+68]\n"
stmt:   ARGD(reg)               1       "# ARGD\n"
stmt:   ARGF(reg)               1       "# ARGF\n"
stmt:   ASGN<tf>(addr,reg)      1       "st<1> %%f%1,%0\n"
stmt:   ASGN<ti>(addr,reg)      1       "st<1> %%%1,%0\n"
stmt:   ASGN<ty>(VREGP,reg)             "# nop\n"
stmt:   ASGNB(reg,reg)                  "# ASGNB\n"
stmt:   CALLB(ar,reg)           2       "call %0; st %%%1,[%%sp+64]\n"
stmt:   CALLV(ar)               2       "call %0; nop\n"
stmt:   JUMPV(acon)             1       "ba %0; nop\n"
stmt:   JUMPV(addr)             1       "jmp %%%0; nop\n"
stmt:   LABELV                          "%a:\n"
stmt:   RET<ty>(reg)            1       "# ret\n"
stmt:   RETV                    1       "# ret\n"
stmt:   reg ""
