GenAsm (language)

From Mill Computing Wiki
Revision as of 07:17, 4 September 2014 by Ivan (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

The genAsm assembly language is a low-level dataflow language for writing programs to be executed on the Mill processors. The language is accepted by the genAsm assembler, which create ELF files suitable as input to the prelinker or specializer. The assembler is intended for use when high-level language compilers are unable to provide a desired access to Mill hardware facilities.

Syntax in BNF:

BNF: Terminal keywords and symbols are italic; meta-symbols are bold.

   program ::=        moduleHead moduleBody-option
   moduleHead ::=     module identifier
   moduleBody ::=     functionDef-sequence
   functionDef ::=    func identifier parmsBinding resultSpec-option { functionBody }
   parmsBinding ::=   ( parmList-option )
   parmList ::=       parm | parm , parmList
   arg ::=            widthTag identifier
   widthTag ::=       b | h | w | d | q | bv | hv | wv | dv | qv
   resultSpec ::=     -> widthTag | -> ( resultList-option )
   resultList ::=     widthTag | widthTag , resultList
   functionBody ::=   expressionList-option
   expressionList ::= expression | expression ; expressionList
   expression ::=     secondary-option | 
                      expression invoke-option | 
                      expression binding | 
                      expression pick
   secondary ::=      primary | secondary call
   primary ::=        number widthSpec-option | argId | boundId | funcId | ( expression )
   widthSpec ::=      : widthTag
   call ::=           ( argList-option )
   argList ::=        arg | arg , argList
   binding ::=        -: identifier | -: bindings
   bindings ::=       { idList }
   idList ::=         identifier | identifier , idList
   invoke ::=         opCall | opId secondary-option
   opCall ::=         opId ( argList-option )