- Aug 21, 2013
-
-
Akira Hatanaka authored
size of floating point registers is 64-bit. Test case will be added when support for mfhc1 and mthc1 is added. llvm-svn: 188847
-
- Aug 14, 2013
-
-
Akira Hatanaka authored
llvm-svn: 188336
-
- Jul 14, 2013
-
-
Craig Topper authored
llvm-svn: 186274
-
- Jul 03, 2013
-
-
Craig Topper authored
Use SmallVectorImpl::iterator/const_iterator instead of SmallVector to avoid specifying the vector size. llvm-svn: 185540
-
- Jun 22, 2013
-
-
Chad Rosier authored
llvm-svn: 184642
-
- May 25, 2013
-
-
Andrew Trick authored
Change SelectionDAG::getXXXNode() interfaces as well as call sites of these functions to pass in SDLoc instead of DebugLoc. llvm-svn: 182703
-
- May 18, 2013
-
-
Matt Arsenault authored
llvm-svn: 182180
-
- May 16, 2013
-
-
Akira Hatanaka authored
Previously, three instructions were needed: trunc.w.s $f0, $f2 mfc1 $4, $f0 sw $4, 0($2) Now we need only two: trunc.w.s $f0, $f2 swc1 $f0, 0($2) llvm-svn: 182053
-
Akira Hatanaka authored
llvm-svn: 182035
-
- May 11, 2013
-
-
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 01, 2013
-
-
Akira Hatanaka authored
instructions. llvm-svn: 180820
-
- Apr 20, 2013
-
-
Tim Northover authored
llvm-svn: 179939
-
Akira Hatanaka authored
llvm-svn: 179906
-
- Apr 13, 2013
-
-
Akira Hatanaka authored
lowerINTRINSIC_WO_CHAIN into MipsSETargetLowering. No functionality changes. llvm-svn: 179444
-
- Mar 30, 2013
-
-
Akira Hatanaka authored
instructions. llvm-svn: 178394
-
- Mar 13, 2013
-
-
Akira Hatanaka authored
mips16 and MipsSETargetLowering is for mips32/64. No functionality changes. llvm-svn: 176917
-
- Mar 12, 2013
-
-
Akira Hatanaka authored
Delete commented-out code. llvm-svn: 176844
-
- Mar 06, 2013
-
-
Akira Hatanaka authored
In N64-static, GOT address is needed to compute the branch address. llvm-svn: 176580
-
- Mar 05, 2013
-
-
Akira Hatanaka authored
handle fp128 returns. llvm-svn: 176523
-
Akira Hatanaka authored
point registers. llvm-svn: 176521
-
Akira Hatanaka authored
parameters from floating point registers if target is mips64 hard float. llvm-svn: 176520
-
- Mar 01, 2013
-
-
Michael Liao authored
- ISD::SHL/SRL/SRA must have either both scalar or both vector operands but TLI.getShiftAmountTy() so far only return scalar type. As a result, backend logic assuming that breaks. - Rename the original TLI.getShiftAmountTy() to TLI.getScalarShiftAmountTy() and re-define TLI.getShiftAmountTy() to return target-specificed scalar type or the same vector type as the 1st operand. - Fix most TICG logic assuming TLI.getShiftAmountTy() a simple scalar type. llvm-svn: 176364
-
- Feb 25, 2013
-
-
Reed Kotler authored
llvm-svn: 176007
-
Reed Kotler authored
llvm-svn: 176002
-
- Feb 24, 2013
-
-
Reed Kotler authored
as early as possible; which means during instruction selection. llvm-svn: 175984
-
- Feb 23, 2013
-
-
Reed Kotler authored
macros.The rest is some small misc. stuff. llvm-svn: 175950
-
- Feb 22, 2013
-
-
Reed Kotler authored
to the immediate operand of sli or cmp function. llvm-svn: 175865
-
Reed Kotler authored
llvm-svn: 175862
-
- Feb 21, 2013
-
-
Reed Kotler authored
there were inline br .+4 instructions. Soon everything can enjoy the full instruction scheduling experience. llvm-svn: 175718
-
- Feb 15, 2013
-
-
Akira Hatanaka authored
No functionality change intended. llvm-svn: 175310
-
- Jan 30, 2013
-
-
Akira Hatanaka authored
Patch by Sasa Stankovic. llvm-svn: 173862
-
- Jan 28, 2013
-
-
Reed Kotler authored
llvm-svn: 173649
-
- Jan 24, 2013
-
-
Reed Kotler authored
Allow Mips16 routines to call Mips32 routines that have abi requirements that either arguments or return values are passed in floating point registers. This handles only the pic case. We have not done non pic for Mips16 yet in any form. The libm functions are Mips32, so with this addition we have a complete Mips16 hard float implementation. We still are not able to complete mix Mip16 and Mips32 with hard float. That will be the next phase which will have several steps. For Mips32 to freely call Mips16 some stub functions must be created. llvm-svn: 173320
-
- Jan 22, 2013
-
-
Akira Hatanaka authored
intended llvm-svn: 173189
-
- Dec 15, 2012
-
-
Reed Kotler authored
In this case, essentially it is soft float with different library routines. The next step will be to make this fully interoperational with mips32 floating point and that requires creating stubs for functions with signatures that contain floating point types. I have a more sophisticated design for mips16 hardfloat which I hope to implement at a later time that directly does floating point without the need for function calls. The mips16 encoding has no floating point instructions so one needs to switch to mips32 mode to execute floating point instructions. llvm-svn: 170259
-
- Dec 12, 2012
-
-
Evan Cheng authored
mention the inline memcpy / memset expansion code is a mess? This patch split the ZeroOrLdSrc argument into two: IsMemset and ZeroMemset. The first indicates whether it is expanding a memset or a memcpy / memmove. The later is whether the memset is a memset of zero. It's totally possible (likely even) that targets may want to do different things for memcpy and memset of zero. llvm-svn: 169959
-
Evan Cheng authored
Also added more comments to explain why it is generally ok to return true. - Rename getOptimalMemOpType argument IsZeroVal to ZeroOrLdSrc. It's meant to be true for loaded source (memcpy) or zero constants (memset). The poor name choice is probably some kind of legacy issue. llvm-svn: 169954
-
- Dec 11, 2012
-
-
Evan Cheng authored
1. Teach it to use overlapping unaligned load / store to copy / set the trailing bytes. e.g. On 86, use two pairs of movups / movaps for 17 - 31 byte copies. 2. Use f64 for memcpy / memset on targets where i64 is not legal but f64 is. e.g. x86 and ARM. 3. When memcpy from a constant string, do *not* replace the load with a constant if it's not possible to materialize an integer immediate with a single instruction (required a new target hook: TLI.isIntImmLegal()). 4. Use unaligned load / stores more aggressively if target hooks indicates they are "fast". 5. Update ARM target hooks to use unaligned load / stores. e.g. vld1.8 / vst1.8. Also increase the threshold to something reasonable (8 for memset, 4 pairs for memcpy). This significantly improves Dhrystone, up to 50% on ARM iOS devices. rdar://12760078 llvm-svn: 169791
-
- Nov 17, 2012
-
-
Akira Hatanaka authored
llvm-svn: 168230
-
- Nov 07, 2012
-
-
Akira Hatanaka authored
Patch by Sasa Stankovic. llvm-svn: 167548
-