summary refs log tree commit diff
path: root/lisc/emit.c
AgeCommit message (Collapse)Author
2016-02-22simplify emit tableQuentin Carbonneaux
2016-02-18stop using OXxx1 and use new OLoadQuentin Carbonneaux
2016-02-15fix comments in emitQuentin Carbonneaux
2016-02-15quickly patch emit (fp load and store)Quentin Carbonneaux
2016-02-15collect and emit fp constantsQuentin Carbonneaux
2016-02-11fp cmp fixes (highly untested)Quentin Carbonneaux
2016-02-04fix indent in emitQuentin Carbonneaux
2016-02-04more mac os compatibility in emitQuentin Carbonneaux
2016-02-04cheap rip relative hackQuentin Carbonneaux
2016-02-04fix emit bugs for binopsQuentin Carbonneaux
2016-02-04fix typo in emit tablesQuentin Carbonneaux
2016-02-03fix call emissionQuentin Carbonneaux
2016-02-03finish emit lifting, seems ok nowQuentin Carbonneaux
2016-02-03more revamp in emitQuentin Carbonneaux
2016-02-02document emit formatQuentin Carbonneaux
2016-01-29start emit simplificationQuentin Carbonneaux
2015-11-30stores becomes storehQuentin Carbonneaux
2015-10-30this test optimization is sometimes incorrectQuentin Carbonneaux
2015-10-30small fix in memory refs emissionQuentin Carbonneaux
2015-10-30add support for RAMem in emitQuentin Carbonneaux
2015-10-30start integrating RAMem referencesQuentin Carbonneaux
2015-10-30emit code for extensions, move slots into RAltQuentin Carbonneaux
2015-10-19uniformize sign extension and mem loadsQuentin Carbonneaux
2015-10-08allow multiple functions in fileQuentin Carbonneaux
2015-10-08emit alignment directives properlyQuentin Carbonneaux
2015-10-07finish implementing data parsingQuentin Carbonneaux
2015-10-01support negative frame offsets in emitQuentin Carbonneaux
They are used to access function parameters passed on the stack.
2015-09-30uniformize alignment code in framesz()Quentin Carbonneaux
2015-09-29wip on new stack slots (emit, spill)Quentin Carbonneaux
2015-09-22parse return types of functionsQuentin Carbonneaux
2015-09-21emit syntactically valid callsQuentin Carbonneaux
2015-09-20factor formatting inside emitfQuentin Carbonneaux
2015-09-20simplify two loops with a pointerQuentin Carbonneaux
2015-09-20save callee-save registersQuentin Carbonneaux
2015-09-17add hack in emit to support stack argumentsQuentin Carbonneaux
The number stored in the .val field of SLOTs has to be sign extended, so we can reach into the caller's frame when necessary (arguments passed on the stack).
2015-09-17start work on fuction parametersQuentin Carbonneaux
2015-09-15hack to enable proper regalloc on callsQuentin Carbonneaux
I add the dual to dummy uses: dummy defs. They are compiled to nothing, but help preserving the invariants I had when writing the register allocator. Clearly, there should be a better way.
2015-09-15implement aggregate passing in regsQuentin Carbonneaux
2015-09-15start function call lowering (wip)Quentin Carbonneaux
2015-09-15start work on aggregate typesQuentin Carbonneaux
The parser now has some code to parse the description of structured types. I tried to be even less specific than LLVM "type" by creating just enough abstraction so that I can deal with both AARCH64 and x64. The base types used in the definition of an aggregate are really just syntactic sugar to give a structure a size and an alignment. Only the location of float components matters for the compilation. In particular this means that the front-ends have to know how the ABI works to pass/return small integer types. This also means that the font-end has to be aware of the layout of structures. Chris Lattner has a proposition [1] for LLVM that is still pending and goes in the direction of giving more control of the ABI the front-end. [1]: http://www.nondot.org/sabre/LLVMNotes/ExtendedIntegerResults.txt
2015-09-15split some long callsQuentin Carbonneaux
2015-09-15fix two bugs in new emitQuentin Carbonneaux
2015-09-15update emit to the new settingQuentin Carbonneaux
2015-09-15fix invalid test in emitQuentin Carbonneaux
It could be that the destination of the copy is a spill location, so we have to check the type of i.to first.
2015-09-15output labels only when necessaryQuentin Carbonneaux
2015-09-15change cmp $0, %reg, to test %reg, %regQuentin Carbonneaux
2015-09-15fix emit(OCopy) and use pointers in max.ssaQuentin Carbonneaux
2015-09-15remove non-critical diagnosticsQuentin Carbonneaux
2015-09-15add truncation operationQuentin Carbonneaux
It would be nicer to have some kind of subtyping where a l variable can be used in place of a w variable but it is more complications than a truncation insutruction. In some cases, it might be less efficient than the above solution by requiring two registers instead of one. (I.e when both the truncated variable and the long variable live together.) We have to see what are the usage patterns.
2015-09-15new NAlign constant and fix frame size computationQuentin Carbonneaux