llvm/lib/Target/Mips
Reed Kotler 46090914b7 Checkin in of first of several patches to finish implementation of
mips16/mips32 floating point interoperability. 

This patch fixes returns from mips16 functions so that if the function
was in fact called by a mips32 hard float routine, then values
that would have been returned in floating point registers are so returned.

Mips16 mode has no floating point instructions so there is no way to
load values into floating point registers.

This is needed when returning float, double, single complex, double complex
in the Mips ABI.

Helper functions in libc for mips16 are available to do this.

For efficiency purposes, these helper functions have a different calling
convention from normal Mips calls.

Registers v0,v1,a0,a1 are used to pass parameters instead of
a0,a1,a2,a3.

This is because v0,v1,a0,a1 are the natural registers used to return
floating point values in soft float. These values can then be moved
to the appropriate floating point registers with no extra cost.

The only register that is modified is ra in this call.

The helper functions make sure that the return values are in the floating
point registers that they would be in if soft float was not in effect
(which it is for mips16, though the soft float is implemented using a mips32
library that uses hard float).
 


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@181641 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-10 22:25:39 +00:00
..
AsmParser Mips assembler: .set reorder support 2013-04-25 23:31:35 +00:00
Disassembler [mips] DSP-ASE move from HI/LO register instructions. 2013-04-18 00:52:44 +00:00
InstPrinter This patch that sets the EmitAlias flag in td files 2013-02-05 08:32:10 +00:00
MCTargetDesc Remove unused argument. 2013-05-10 18:16:59 +00:00
TargetInfo Move all of the header files which are involved in modelling the LLVM IR 2013-01-02 11:36:10 +00:00
CMakeLists.txt Checkin in of first of several patches to finish implementation of 2013-05-10 22:25:39 +00:00
LLVMBuild.txt Add disassembler to MIPS. 2012-04-17 18:03:21 +00:00
Makefile Remove edis - the enhanced disassembler. Fixes PR14654. 2012-12-19 19:55:47 +00:00
MicroMipsInstrFormats.td [mips] Add definitions of micromips load and store instructions. 2013-04-25 01:21:25 +00:00
MicroMipsInstrInfo.td [mips] Add definitions of micromips load and store instructions. 2013-04-25 01:21:25 +00:00
Mips16FrameLowering.cpp Move the eliminateCallFramePseudoInstr method from TargetRegisterInfo 2013-02-21 20:05:00 +00:00
Mips16FrameLowering.h [mips] Add parameter Alignment to MipsFrameLowering's constructor. 2013-03-29 01:51:04 +00:00
Mips16HardFloat.cpp Checkin in of first of several patches to finish implementation of 2013-05-10 22:25:39 +00:00
Mips16HardFloat.h Checkin in of first of several patches to finish implementation of 2013-05-10 22:25:39 +00:00
Mips16InstrFormats.td Remove the form field from Mips16 instruction formats and set things 2013-02-14 03:05:25 +00:00
Mips16InstrInfo.cpp [mips] Define overloaded versions of storeRegToStack and loadRegFromStack. 2013-03-29 02:14:12 +00:00
Mips16InstrInfo.h [mips] Define overloaded versions of storeRegToStack and loadRegFromStack. 2013-03-29 02:14:12 +00:00
Mips16InstrInfo.td [mips] Fix definitions of multiply, multiply-add/sub and divide instructions. 2013-03-30 01:36:35 +00:00
Mips16ISelDAGToDAG.cpp ArrayRefize getMachineNode(). No functionality change. 2013-04-19 22:22:57 +00:00
Mips16ISelDAGToDAG.h This patch enables llvm to switch between compiling for mips32/mips64 2013-04-09 19:46:01 +00:00
Mips16ISelLowering.cpp Checkin in of first of several patches to finish implementation of 2013-05-10 22:25:39 +00:00
Mips16ISelLowering.h [mips] Define two subclasses of MipsTargetLowering. Mips16TargetLowering is for 2013-03-13 00:54:29 +00:00
Mips16RegisterInfo.cpp [mips] Fix the head Mips16RegisterInfo.cpp comment 2013-05-02 18:28:03 +00:00
Mips16RegisterInfo.h [mips] Define a function which returns the GPR register class. 2013-03-29 19:17:42 +00:00
Mips64InstrInfo.td [mips] Fix handling of instructions which copy to/from accumulator registers. 2013-04-30 23:22:09 +00:00
Mips.h Add the skeleton for the Mips constant island pass. 2013-02-27 03:33:58 +00:00
Mips.td [mips] Remove android calling convention. 2013-03-05 23:22:30 +00:00
MipsAnalyzeImmediate.cpp Fix integer undefined behavior due to signed left shift overflow in LLVM. 2012-08-24 23:29:28 +00:00
MipsAnalyzeImmediate.h Fix undefined behavior in the Mips backend. 2012-03-09 06:36:45 +00:00
MipsAsmPrinter.cpp Remove some uneeded pseudos in the presence of the naked function attribute. 2013-05-03 23:17:24 +00:00
MipsAsmPrinter.h This is a resubmittal. For some reason it broke the bots yesterday 2013-01-18 21:20:38 +00:00
MipsCallingConv.td Checkin in of first of several patches to finish implementation of 2013-05-10 22:25:39 +00:00
MipsCodeEmitter.cpp [mips] Clean up MipsISelDAGToDAG.cpp and MipsISelLowering.cpp. 2013-04-11 19:07:14 +00:00
MipsCondMov.td [mips] Fix inefficient code generation. 2013-03-01 21:52:08 +00:00
MipsConstantIslandPass.cpp This patch enables llvm to switch between compiling for mips32/mips64 2013-04-09 19:46:01 +00:00
MipsDelaySlotFiller.cpp Fix comment. 2013-03-25 20:11:16 +00:00
MipsDSPInstrFormats.td [mips] DSP-ASE move from HI/LO register instructions. 2013-04-18 00:52:44 +00:00
MipsDSPInstrInfo.td [mips] Split the DSP control register and define one register for each field of 2013-05-03 18:37:49 +00:00
MipsFrameLowering.cpp Move all of the header files which are involved in modelling the LLVM IR 2013-01-02 11:36:10 +00:00
MipsFrameLowering.h [mips] Add parameter Alignment to MipsFrameLowering's constructor. 2013-03-29 01:51:04 +00:00
MipsInstrFormats.td [mips] Add definitions of micromips load and store instructions. 2013-04-25 01:21:25 +00:00
MipsInstrFPU.td [mips] Define reg+imm load/store pattern templates. 2013-03-30 02:01:48 +00:00
MipsInstrInfo.cpp [mips] Do not add SecondLastInst to list BranchInstrs if there is only one 2013-03-01 01:22:26 +00:00
MipsInstrInfo.h [mips] Define overloaded versions of storeRegToStack and loadRegFromStack. 2013-03-29 02:14:12 +00:00
MipsInstrInfo.td [mips] Add instruction selection pattern for (seteq $LHS, 0). 2013-05-08 19:38:04 +00:00
MipsISelDAGToDAG.cpp [mips] Clean up MipsISelDAGToDAG.cpp and MipsISelLowering.cpp. 2013-04-11 19:07:14 +00:00
MipsISelDAGToDAG.h [mips] Rename functions and variables to start with proper case. 2013-03-14 18:33:23 +00:00
MipsISelLowering.cpp Checkin in of first of several patches to finish implementation of 2013-05-10 22:25:39 +00:00
MipsISelLowering.h Checkin in of first of several patches to finish implementation of 2013-05-10 22:25:39 +00:00
MipsJITInfo.cpp Move all of the header files which are involved in modelling the LLVM IR 2013-01-02 11:36:10 +00:00
MipsJITInfo.h Classic JIT is still being supported by MIPS, along with MCJIT. 2012-12-03 23:11:12 +00:00
MipsLongBranch.cpp This patch enables llvm to switch between compiling for mips32/mips64 2013-04-09 19:46:01 +00:00
MipsMachineFunction.cpp [mips] Lower EH_RETURN. 2013-01-30 00:26:49 +00:00
MipsMachineFunction.h [mips] Lower EH_RETURN. 2013-01-30 00:26:49 +00:00
MipsMCInstLower.cpp Use the new script to sort the includes of every file under lib. 2012-12-03 16:50:05 +00:00
MipsMCInstLower.h MIPS DSP: add code necessary for pseudo instruction lowering. 2012-09-27 01:59:07 +00:00
MipsModuleISelDAGToDAG.cpp This patch enables llvm to switch between compiling for mips32/mips64 2013-04-09 19:46:01 +00:00
MipsModuleISelDAGToDAG.h This patch enables llvm to switch between compiling for mips32/mips64 2013-04-09 19:46:01 +00:00
MipsOs16.cpp 80 columns. 2013-04-22 20:13:37 +00:00
MipsOs16.h This is for an experimental option -mips-os16. The idea is to compile all 2013-04-10 16:58:04 +00:00
MipsRegisterInfo.cpp Checkin in of first of several patches to finish implementation of 2013-05-10 22:25:39 +00:00
MipsRegisterInfo.h Checkin in of first of several patches to finish implementation of 2013-05-10 22:25:39 +00:00
MipsRegisterInfo.td [mips] Split the DSP control register and define one register for each field of 2013-05-03 18:37:49 +00:00
MipsRelocations.h remove blanks, and some code format 2012-02-28 07:46:26 +00:00
MipsSchedule.td remove blanks, and some code format 2012-02-28 07:46:26 +00:00
MipsSEFrameLowering.cpp [mips] Handle reading, writing or copying of ccond field of DSP control 2013-05-02 23:07:05 +00:00
MipsSEFrameLowering.h [mips] Add parameter Alignment to MipsFrameLowering's constructor. 2013-03-29 01:51:04 +00:00
MipsSEInstrInfo.cpp [mips] Handle reading, writing or copying of ccond field of DSP control 2013-05-02 23:07:05 +00:00
MipsSEInstrInfo.h [mips] Define overloaded versions of storeRegToStack and loadRegFromStack. 2013-03-29 02:14:12 +00:00
MipsSEISelDAGToDAG.cpp [mips] Split the DSP control register and define one register for each field of 2013-05-03 18:37:49 +00:00
MipsSEISelDAGToDAG.h [mips] Split the DSP control register and define one register for each field of 2013-05-03 18:37:49 +00:00
MipsSEISelLowering.cpp [mips] Instruction selection patterns for DSP-ASE vector select and compare 2013-04-30 22:37:26 +00:00
MipsSEISelLowering.h [mips] Move MipsTargetLowering::lowerINTRINSIC_W_CHAIN and 2013-04-13 02:13:30 +00:00
MipsSelectionDAGInfo.cpp remove Emacs-tag form .cpp files in Mips Backend, and fix some typo. 2012-02-17 08:55:11 +00:00
MipsSelectionDAGInfo.h Reverse unnecessary changes made in r129606 and r129608. There is no change in functionality. 2011-04-15 21:51:11 +00:00
MipsSERegisterInfo.cpp [mips] Define a function which returns the GPR register class. 2013-03-29 19:17:42 +00:00
MipsSERegisterInfo.h [mips] Define a function which returns the GPR register class. 2013-03-29 19:17:42 +00:00
MipsSubtarget.cpp Checkin in of first of several patches to finish implementation of 2013-05-10 22:25:39 +00:00
MipsSubtarget.h Checkin in of first of several patches to finish implementation of 2013-05-10 22:25:39 +00:00
MipsTargetMachine.cpp Checkin in of first of several patches to finish implementation of 2013-05-10 22:25:39 +00:00
MipsTargetMachine.h This patch enables llvm to switch between compiling for mips32/mips64 2013-04-09 19:46:01 +00:00
MipsTargetObjectFile.cpp This is a resubmittal. For some reason it broke the bots yesterday 2013-01-18 21:20:38 +00:00
MipsTargetObjectFile.h This is a resubmittal. For some reason it broke the bots yesterday 2013-01-18 21:20:38 +00:00