.
">
>
;"assembler name (e.g. GRTR?, SUB)"
;"numeric opcode"
;"argspec. see examples."
;"C implementation (use names from argspec)"
;"unique name (e.g. GRTRB, SUBB)"
)>
> .i > <3 .ops> >) .results>>
>>>
>
>
.act>)>
> "=" >> ",">>
>
>
.act>)>
>> ": return \"" > "\";" ,CR>>
>
>
)>
result>
");" ,CR>)
(ELSE
> BYTE>
>> " = p[" "];" ,CR>)
(<==? <2 <1 .args>> OFFSET>
>> " = (int8_t)p[" "];" ,CR>)
(<==? <2 <1 .args>> FIX>
>> " = GETFIX(bp[p[" "]]);" ,CR>)
>)>>>
>
>
>
)
"NAME" act)
.act>)>
> ": {" ,CR
>>
"const uint8_t * const oldp = p;" ,CR
"p += " >>>> !\; ,CR
> ,CR
"break;" ,CR !\} ,CR>>
>
>
) (s "\"<%s") "NAME" act)
\\n\""> .act>)>
result>
"%hhi")
(ELSE > BYTE>
"%hhu")
(<==? <2 <1 .args>> OFFSET>
"%hhi")
(<==? <2 <1 .args>> FIX>
"fix%hhu")>)>>>
>
>
"\"">)
(i 0)
(n >))
)>
>
"]">>
>>
)
"NAME" act)
.act>)>
>> ": " ,CR
"if (inlen < " >>> ") { return EBADOPARGS; };" ,CR
"*buf += snprintf(*buf, outlen, "
>
"(*p)">
");" ,CR
"*p += " >>> ";" ,CR
"return 0;" ,CR>>
>
>
rhs)) JUMP(offs);"
SUB (SUB (x FIX) (y FIX) result)
SUBB (SUB (x FIX) (rhs BYTE) result)
MUL (MUL (x FIX) (y FIX) result)
HALT (HALT) "return;">>
>
>
>
;>
>
>
;>
>