High level assembly
for Yet Another Low Level Language.
Patterson et al, UC Berkeley, 1979.
A microprogramming language resembling conventional assembly language.
YALLL (Yet Another Low Level Language)
YALLL dates from 1979. It was developed by a team from the University of California at Berkeley.
..."Rather than to try to bridge the gap between a [machine independent] HLL to microarchiteeture in one step, we have designed a low level language that is capable of producing microcode for different machines...'
The primitives of YALLL correspond to commonly available microinstructions: add, subtract, increment, decrement, and, or, exclusive or, negation, several types of shift, load from and store into main memory, register-toregister move, and put-constant-in-register. It is hoped that these primitives will permit compilation to microcode for a large class of interesting machines.
Variables are viewed as general purpose registers with the exception of "mar" (memory address register) and "mbr" (memory buffer register). The compiler should take care of the correct utilization of special purpose microregisters.
A program is preceded by a declaration part in which YALLL register names are bound to physical machine registers. It is not clear from the description whether binding is required for all variables, or whether it is optional.
The program is specified completely sequentially.
In accordance with the above mentioned design goals, the structure of YALLL is that of a conventional assembly language. YALLL includes a conditional and an unconditional jump, a procedure call and return, an exit-with- value instruction, and a multiway branch.
This branch facility is fairly sophisticated, it allows the comparison of the contents of a register with a constant mask that may contain "true', "false" and "dont-care" bits.
Datatypes and datastructures.
There are no datatypes and consequently no data-structuring facilities in YALLL. Five types of constants exist: binary, octal, decimal and hexadecimal numbers, and masks.
YALLL has been implemented on two different machines, the DEC VAX-II and the Hewlett-Packard HP300. Several example programs were tried out on both machines and the results were compared with each other and with equivalent hand-written code. The HP implementation performed much better than the VAX implementation. The baroque structure of the VAX micro-architecture, combined with the complete lack of documentation for this machine at the time  was written, discouraged the implementers from attempting any code optimization. Another interesting observation is that both compilers consisted of about 5000 lines of high level language code. This suggests that a full optimizing compiler for a high level microprogramming language of the complexity of EMPL for example, will be huge.
The value of YALLL lies in its moderate design goals which enabled the designers to produce implementations for two different machines. This has never been done for any other machine independent mlcroprogramming language. The fixed set of primitives included in YALLL will, at least for some machines, render the generation of efficient code difficult.
in Proceedings of the 13th International Symposium on Microarchitecture Springs, Colorado, United States 1980 view details
in Proc 14th Ann Workshop Microprogramming (MICRO-14), 1981 view details