[HN Gopher] An ARM Assembler Written in Lisp
___________________________________________________________________
An ARM Assembler Written in Lisp
Author : chrisjj
Score : 99 points
Date : 2023-07-08 16:58 UTC (6 hours ago)
(HTM) web link (forum.ulisp.com)
(TXT) w3m dump (forum.ulisp.com)
| monocasa wrote:
| A lot of lisps end up writing their own assemblers, the lisp
| model of 80/20ing your own compiler with every compiler step
| being a different set of s-expressions as sorts of intermediate
| representations works best holistically. On the old lisp machines
| even the microcode source would be specific s-expressions that as
| a final pass would be converted into the actual bit pattern
| needed by the machine.
|
| This paradigm is well seen in the GOAL (Game Oriented Assembly
| Lisp) code for Jak & Daxter that could mix relatively standard
| lisp, MIPS asm, and PS2 custom vector asm all within the same
| function:
| https://web.archive.org/web/20070127022728/http://lists.midn...
| rprospero wrote:
| Thank you for the explanation about the microcode. Many years
| ago, someone was explaining to me that Lisp machines were Lisp
| "all the way down". There were no layers that you couldn't
| reprogram with Lisp. When pressed for details, he claimed that
| even the band gap potential in the transistors of the machine
| could be reprogrammed, because the transistors were just an
| abstraction over more Lisp.
|
| Your explanation makes far more sense.
| lispm wrote:
| In the early days the CPUs had loadable microcode. With new
| operating system versions came language extensions for Lisp.
| Then one also got a new version of the microcode, which then
| had been extended for, say, inclusion of an instruction for
| OOP method dispatch. One also could compile some code to
| microcode.
|
| Later the CPUs were actually Microprocessors (from TI and
| Symbolics). At least for the Symbolics Ivory microprocessor,
| the microcode no longer was loadable.
| senkora wrote:
| Also seen in the nanopass compiler framework:
| http://nanopass.org/
| nathell wrote:
| I once wrote a rudimentary x86 assembler in about 250 lines of
| Clojure:
|
| https://github.com/nathell/lithium/blob/master/src/lithium/a...
|
| In general, I find that s-expressions are actually a nice syntax
| for assembly languages. For x86, they kind of sidestep the AT&T
| vs. Intel conundrum, and you get to write macro-like functions in
| the host Lisp that compile down to s-expressions.
| agumonkey wrote:
| doesn't clang use a sexp like notation for some IR ?
| excircul wrote:
| GCC's RTL does
|
| https://gcc.gnu.org/onlinedocs/gccint/RTL.html
| mejutoco wrote:
| and webassembly.
| agumonkey wrote:
| Oh that's it, I was reading some wasm articles last month.
| icedata wrote:
| At LCSI we had assemblers and debugging tools for 6502, x86 and
| others written in LMI Lisp, which we used to create several
| popular commercial versions of Logo.
| [deleted]
| cylinder714 wrote:
| SBCL: the ultimate assembly code breadboard (2014):
|
| http://pvk.ca/Blog/2014/03/15/sbcl-the-ultimate-assembly-cod...
| johndoe0815 wrote:
| And here's a Lisp written in ARM Assembler :)
|
| https://github.com/marcpaq/arpilisp
| pjmlp wrote:
| So the base components of a future Lisp Machine are available.
| :)
| johndoe0815 wrote:
| There's something even better for the Raspberry Pi (2B only
| at the moment) - interim OS, a bare metal Lisp by Lukas
| Hartmann of MNT Research, the creator of the MNT Reform
| laptop.
|
| The original site seems to be unavailable right now, but it's
| mirrored on archive.org:
|
| https://web.archive.org/web/20230331151459/http://interim-
| os...
| mepian wrote:
| In their twilight years Symbolics implemented their own DEC Alpha
| assembler in Common Lisp to aid the development of their Lisp
| machine emulator: http://pt.withy.org/publications/VLM.html
|
| You can still find its leaked source code on the internet.
|
| "We built a prototype of the emulator in C, but it quickly became
| obvious that we could not achieve the level of performance
| desired in C. Examination of code emitted by the C compiler
| showed it took very poor advantage of the Alpha's dual-issue
| capabilities. A second implementation was done in Alpha assembly
| language and is the basis for the current product.
|
| We built a number of tools (in Lisp, running on Genera) that
| supported the level of complexity of the assembly language
| program we were attempting. A translator was built that allowed
| us to use Lisp as a macro language. One of the primary benefits
| of using Lisp was that we could use all our normal development
| tools, including incremental patching, even though we were
| working in another machine's assembly language. Even more
| beneficial, however, was that early on in the project, we were
| able to easily graft on to the translator a cycle-counting tool
| that allowed one to easily and automatically "preview" any code
| fragment and see its total cycle cost, dual-issues that were
| taken or missed, and any free stall slots. Because this tool was
| integrated directly with the Genera editor, we were able to pro-
| actively optimize our code, right from the start. The full paper
| describes this tool in more detail, with examples, and compares
| it with tools that have recently become available from DEC that
| attempt to automatically re-organize executable files. It is our
| claim that our tool, because of its interactive nature, offers
| many more opportunities for optimization."
| abecedarius wrote:
| Reminds me of the predecessor for this 6502 assembler:
| https://www.pagetable.com/?p=848 -- the comments include a note
| by the author, Chip Morningstar of Habitat, saying the Lisp
| assembler was terribly slow on a VAX.
| lispm wrote:
| The Genera code for ARM64 and Intel 86-64 is also written that
| way.
|
| Clozure CL should also include an inline assembler.
|
| Lisp assemblers date back to the 60s.
| jdontillman wrote:
| In their earlier years, the Symbolics 3600 series machines
| included a Motorola 68K series Front End Processor (the "FEP")
| for booting the main processor. And the assembler for that was
| written in Lisp.
| snvzz wrote:
| RISC-V next?
| kazinator wrote:
| Major Lisp implementations have things like this.
|
| E.g. look at the _defarmlap_ function definitions in Clozure
| Common Lisp:
|
| https://github.com/Clozure/ccl/blob/master/level-0/ARM/arm-h...
|
| .. and other files, plus other architectures in other
| subdirectories.
| erichocean wrote:
| Factor (a modern stack language) has assemblers for x86 and
| PowerPC (last I checked), and should be easy to also incorporate
| ARM.
___________________________________________________________________
(page generated 2023-07-08 23:00 UTC)