- May 16, 2013
-
-
Rafael Espindola authored
Now that we have good testing, remove addFrameMove and create cfi instructions directly. llvm-svn: 182052
-
Akira Hatanaka authored
llvm-svn: 182050
-
Jack Carter authored
This patch removes alias definition for addiu $rs,$imm and instead uses the TwoOperandAliasConstraint field in the ArithLogicI instruction class. This way all instructions that inherit ArithLogicI class have the same macro defined. The usage examples are added to test files. Patch by Vladimir Medic llvm-svn: 182048
-
Jack Carter authored
llvm-svn: 182047
-
Akira Hatanaka authored
llvm-svn: 182044
-
Akira Hatanaka authored
invalid instruction sequence. Rather than emitting an int-to-FP move instruction and an int-to-FP conversion instruction during instruction selection, we emit a pseudo instruction which gets expanded post-RA. Without this change, register allocation can possibly insert a floating point register move instruction between the two instructions, which is not valid according to the ISA manual. mtc1 $f4, $4 # int-to-fp move instruction. mov.s $f2, $f4 # move contents of $f4 to $f2. cvt.s.w $f0, $f2 # int-to-fp conversion. llvm-svn: 182042
-
Jack Carter authored
This patch adds bnez and beqz instructions which represent alias definitions for bne and beq instructions as follows: bnez $rs,$imm => bne $rs,$zero,$imm beqz $rs,$imm => beq $rs,$zero,$imm The corresponding test cases are added. Patch by Vladimir Medic llvm-svn: 182040
-
Akira Hatanaka authored
llvm-svn: 182036
-
Akira Hatanaka authored
llvm-svn: 182035
-
Reed Kotler authored
This creates stubs that help Mips32 functions call Mips16 functions which have floating point parameters that are normally passed in floating point registers. llvm-svn: 181972
-
- May 14, 2013
-
-
Reed Kotler authored
llvm-svn: 181759
-
Reed Kotler authored
"static". llvm-svn: 181754
-
Reed Kotler authored
Mips16/32 floating point interoperability. When Mips16 code calls external functions that would normally have some of its parameters or return values passed in floating point registers, it needs (Mips32) helper functions to do this because while in Mips16 mode there is no ability to access the floating point registers. In Pic mode, this is done with a set of predefined functions in libc. This case is already handled in llvm for Mips16. In static relocation mode, for efficiency reasons, the compiler generates stubs that the linker will use if it turns out that the external function is a Mips32 function. (If it's Mips16, then it does not need the helper stubs). These stubs are identically named and the linker knows about these tricks and will not create multiple copies and will delete them if they are not needed. llvm-svn: 181753
-
- May 13, 2013
-
-
Jack Carter authored
This patch adds alias for addiu instruction which enables following syntax: addiu $rs,imm The macro is translated as: addiu $rs,$rs,imm Contributer: Vladimir Medic llvm-svn: 181729
-
Akira Hatanaka authored
This option is used when the user wants to avoid emitting double precision FP loads and stores. Double precision FP loads and stores are expanded to single precision instructions after register allocation. llvm-svn: 181718
-
Akira Hatanaka authored
operands as the prototype instruction but with a different opcode. llvm-svn: 181714
-
Akira Hatanaka authored
llvm-svn: 181713
-
Rafael Espindola authored
It was just a less powerful and more confusing version of MCCFIInstruction. A side effect is that, since MCCFIInstruction uses dwarf register numbers, calls to getDwarfRegNum are pushed out, which should allow further simplifications. I left the MachineModuleInfo::addFrameMove interface unchanged since this patch was already fairly big. llvm-svn: 181680
-
- May 11, 2013
-
-
Rafael Espindola authored
To add a frame now there is a dedicated addFrameMove which also takes care of constructing the move itself. llvm-svn: 181657
-
Reed Kotler authored
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). llvm-svn: 181641
-
- May 10, 2013
-
-
Rafael Espindola authored
llvm-svn: 181618
-
- May 08, 2013
-
-
Akira Hatanaka authored
llvm-svn: 181459
-
- May 04, 2013
-
-
Reed Kotler authored
llvm-svn: 181072
-
- May 03, 2013
-
-
Akira Hatanaka authored
its fields. This removes false dependencies between DSP instructions which access different fields of the the control register. Implicit register operands are added to instructions RDDSP and WRDSP after instruction selection, depending on the value of the mask operand. llvm-svn: 181041
-
Akira Hatanaka authored
register. - Define pseudo instructions which store or load ccond field of the DSP control register. - Emit the pseudos in MipsSEInstrInfo::storeRegToStack and loadRegFromStack. - Expand the pseudos before callee-scan save. - Emit instructions RDDSP or WRDSP to copy between ccond field and GPRs. llvm-svn: 180969
-
- May 02, 2013
-
-
Richard Sandiford authored
...aka a test commit. llvm-svn: 180936
-
Akira Hatanaka authored
No functionality changes. llvm-svn: 180897
-
- May 01, 2013
-
-
Akira Hatanaka authored
Expand copy instructions between two accumulator registers before callee-saved scan is done. Handle copies between integer GPR and hi/lo registers in MipsSEInstrInfo::copyPhysReg. Delete pseudo-copy instructions that are not needed. llvm-svn: 180827
-
Akira Hatanaka authored
instructions. llvm-svn: 180820
-
- Apr 30, 2013
-
-
Akira Hatanaka authored
No intended functionality changes. llvm-svn: 180807
-
Akira Hatanaka authored
llvm-svn: 180801
-
- Apr 26, 2013
-
-
Jack Carter authored
Mips have delayslots for certain instructions like jumps and branches. These are instructions that follow the branch or jump and are executed before the jump or branch is completed. Early Mips compilers could not cope with delayslots and left them up to the assembler. The assembler would fill the delayslots with the appropriate instruction, usually just a nop to allow correct runtime behavior. The default behavior for this is set with .set reorder. To tell the assembler that you don't want it to mess with the delayslot one used .set noreorder. For backwards compatibility we need to support .set reorder and have it be the default behavior in the assembler. Our support for it is to insert a NOP directly after an instruction with a delayslot when in .set reorder mode. Contributer: Vladimir Medic llvm-svn: 180584
-
- Apr 25, 2013
-
-
Akira Hatanaka authored
Patch by Zoran Jovanovic. llvm-svn: 180241
-
Akira Hatanaka authored
Patch by Zoran Jovanovic. llvm-svn: 180238
-
- Apr 23, 2013
-
-
Akira Hatanaka authored
No intended changes in functionality. llvm-svn: 180130
-
- Apr 22, 2013
-
-
Akira Hatanaka authored
llvm-svn: 180040
-
Akira Hatanaka authored
shifted by the same amount and the shift amount is smaller than the element size. llvm-svn: 180039
-
- Apr 20, 2013
-
-
Tim Northover authored
llvm-svn: 179939
-
Akira Hatanaka authored
llvm-svn: 179906
-
Michael Liao authored
llvm-svn: 179901
-