[LLVMdev] mips 16 port available

Reed Kotler rkotler at mips.com
Mon Nov 5 09:50:18 PST 2012


I have pushed almost all the changes for the mips16 port and it passes 
about 90% of the single source tests from test-suite. It is still an 
experimental port but I am working hard to finish up the last details as 
soon as possible.

Some things that are incomplete:
1) It is using soft float at this time. I did not like the gcc mips16 
floating point design and will do something much better for llvm but I 
need to make some non trivial changes in the target independent
part of llvm and will do that after I pass all the tests. Mips16 does 
not have floating point instructions and you have to switch to mips32 
mode to do that.
2) Currently only pic is supported. It will be easy to add non pic, I 
just have not had the time.
3) Large frames (>15 bits size) are not supported yet. I hope to finish 
this up this week.
4) Exception handling is working but I'm waiting on approval of a patch 
that includes a target independent patch for part of LLVM.
5) Direct object emitter not working with it yet.

For those doing new ports, you might be interested to study how I did 
the td files for mips16. There is still some cleanup I will do but 
essentially I have cleanly layered the abstraction into four layers:
1) machine formats
2) assembly syntax
3) instructions (none with patterns)
4) patterns.

At many levels, it seemed to me much cleaner to make these distinct 
abstraction layers, especially separating the definition of instructions 
from the selection of DAG patterns.

There are a few shortcomings that I would like to address in tablegen 
related to this approach and will do that when I'm done with this base port.
1) Enable the Pattern class (currently only Pat and ComplexPattern work 
in tablegen).
2) Add some more macro/template like capabilities for patterns as 
currently exist for instructions.







More information about the llvm-dev mailing list