summary refs log tree commit diff
path: root/isel.c
AgeCommit message (Collapse)Author
2017-04-08prepare for multi-targetQuentin Carbonneaux
This big diff does multiple changes to allow the addition of new targets to qbe. The changes are listed below in decreasing order of impact. 1. Add a new Target structure. To add support for a given target, one has to implement all the members of the Target structure. All the source files where changed to use this interface where needed. 2. Single out amd64-specific code. In this commit, the amd64 target T_amd64_sysv is the only target available, it is implemented in the amd64/ directory. All the non-static items in this directory are prefixed with either amd64_ or amd64_sysv (for items that are specific to the System V ABI). 3. Centralize Ops information. There is now a file 'ops.h' that must be used to store all the available operations together with their metadata. The various targets will only select what they need; but it is beneficial that there is only *one* place to change to add a new instruction. One good side effect of this change is that any operation 'xyz' in the IL now as a corresponding 'Oxyz' in the code. 4. Misc fixes. One notable change is that instruction selection now generates generic comparison operations and the lowering to the target's comparisons is done in the emitter. GAS directives for data are the same for many targets, so data emission was extracted in a file 'gas.c'. 5. Modularize the Makefile. The Makefile now has a list of C files that are target-independent (SRC), and one list of C files per target. Each target can also use its own 'all.h' header (for example to define registers).
2017-02-24update isel commentQuentin Carbonneaux
2017-02-22do not err on address comparisonsQuentin Carbonneaux
While I was at it I also refreshed some bits in the instruction selection.
2017-02-08make rsp and rbp globally liveQuentin Carbonneaux
2017-01-10isel fixes for lame apple assemblerQuentin Carbonneaux
2016-12-29remove debugging stubQuentin Carbonneaux
2016-12-29do not create useless mem refsQuentin Carbonneaux
2016-12-29simplify seladdr()Quentin Carbonneaux
This also provides a violent fix to a bug causing an invalid addressing to be generated when indexing into a global variable. The fix is not satisfactory, though, as bad code is generated (instead of invalid code before).
2016-04-23correctly update nuse for jump argumentsQuentin Carbonneaux
2016-04-22refine fp conversion instructionsQuentin Carbonneaux
2016-04-20match jumps/ops with il textQuentin Carbonneaux
2016-04-13call fixarg on the correct instructionQuentin Carbonneaux
Because one call to fixarg can emit an instruction, using curi, for the second fixarg calls patched is incorrect. AFL found that bug.
2016-04-12nicer agony message in iselQuentin Carbonneaux
2016-04-12more extensive handling of fast localsQuentin Carbonneaux
2016-04-12both comparison arguments need to be fixedQuentin Carbonneaux
The second argument will not be a constant because of the assertion. But it could be a fast local, and this situation needs to be handled by the last case of fixarg().
2016-04-12handle dumb conditional jumps in iselQuentin Carbonneaux
I also removed the code to handle jumps with a constant argument since those should be eliminated by the folding pass.
2016-03-31move abi code in a new fileQuentin Carbonneaux
2016-03-31cleanup error handlingQuentin Carbonneaux
2016-03-29new layout, put LICENSE in rootQuentin Carbonneaux