summaryrefslogtreecommitdiff
path: root/src/jit/codegenarmarch.cpp
AgeCommit message (Collapse)AuthorFilesLines
2017-08-01Merge pull request #13142 from hseok-oh/ryujit/fix_12627Bruce Forstall1-2/+116
[RyuJIT/ARM32] Tailcall: passing struct argument
2017-08-01Merge pull request #13138 from hseok-oh/ryujit/nyi_zrBruce Forstall1-3/+5
[RyuJIT/ARM32] Remove NYI: using zero register
2017-08-01[RyuJIT/ARM32] Tailcall: passing struct argumentHyeongseok Oh1-2/+116
Fix bug in tailcall(jmp) to pass struct argument Remove NYI for HFA struct passing
2017-08-01[RyuJIT/ARM32] Remove NYI: using zero registerHyeongseok Oh1-3/+5
We can remove NYI to using zero register to assign constant zero argument. There is no zero register on ARM32. (src/jit/registerarm32.h) So we can change the NYI to unreached() assertion.
2017-07-28[RyuJIT/ARM32] Remove NYI: promoted struct argumentHyeongseok Oh1-14/+8
We can remove NYI for promoted struct argument on codegen phase. On morphing phase, argument assignment for promoted struct will be changed to assignment on tmpvar struct. And this tmpvar is not promoted. So we change this NYI to assertion check.
2017-07-24[RyuJIT/ARM32] Fix stack overflow on codegen phaseHyeongseok Oh1-3/+7
Fix stack overflow on codegen phase Array size problem for reference map in genPutArgStk()
2017-07-18[ARM32] Remove useless code: struct split using float registersHyeongseok Oh1-7/+5
On ARM32, the split struct is using only integer register. If float registers remain but not enough to pass all HFA struct value, the HFA struct is passed using stack only. So we can remove useless code in morph.cpp that is split struct using float registers on ARM32.
2017-07-14Merge pull request #12618 from hseok-oh/ryujit/fix_12600Bruce Forstall1-2/+13
[RyuJIT/ARM32] Internal register candadate for split struct argument
2017-07-12Remove unused GT_PHYSREGDST nodeCarol Eidt1-3/+0
2017-07-12Merge pull request #12708 from ↵Bruce Forstall1-2/+10
YongseopKim/ryujit/arm32/add_nyi_promoted_struct_in_genPutArgStk [RyuJIT/ARM32] Add NYI_ARM for promoted struct to genPutArgStk
2017-07-12[RyuJIT/ARM32] Add NYI_ARM for promoted struct to genPutArgStkYongseop Kim1-2/+10
- Before solving the issue(#12657), add NYI_ARM to genPutArgStk(). - This commit's code's objective is same to the PR(#12655). - This is from the issue(#12622).
2017-07-11[RyuJIT/ARM32] Internal register candadate for split struct argumentHyeongseok Oh1-2/+13
Change candidate mask for internal register candidate to not include target registers. On codegen phase, if addrReg is allocated to be destroyed by targetReg, we use internal register as addrReg.
2017-07-09Merge pull request #12572 from wateret/armel/dblarg_stackCarol Eidt1-0/+10
[RyuJIT/armel] Passing stack double arguments
2017-07-07[RyuJIT/ARM32] Codegen: split struct argument less than 16 bytesHyeongseok Oh1-103/+139
Enable passing split struct (less than 16 bytes) - LSRA phase - Codegen phase
2017-07-06Merge pull request #12655 from YongseopKim/ryujit/arm32/add_nyi_promoted_structBruce Forstall1-0/+7
[RyuJIT/ARM32] Add NYI_ARM for handling promoted struct
2017-07-06[RyuJIT/ARM32] Add NYI_ARM for handling promoted structYongseop Kim1-0/+7
- In RyuJIT/ARM32, promoted struct on stack can't be handled like splitted struct arg's one. - Until implementing handling it, make it entering the NYI_ARM.
2017-07-05[RyuJIT/ARM32] Fix assertion failed 'gcPtrCount == 0' (#12621)Yongseop Kim1-2/+2
* [RyuJIT/ARM32] Fix assertion failed 'gcPtrCount == 0' Change wrong gcPtrCount's value from gtNumSlots to gtNumberReferenceSlots of GenTreePutArgStk * Fix a formatting error
2017-07-05Merge pull request #12575 from wateret/armel/floatretBruce Forstall1-2/+15
[RyuJIT/armel] Move returned float to float reg
2017-07-04[RyuJIT/armel] Move returned float to float regHanjoung Lee1-2/+15
Returned float values are in r0(float) or r0:r1(double). These values must be moved to proper float register after call. Fix #12574
2017-07-03[RyuJIT/armel] Passing stack double argumentsHanjoung Lee1-0/+10
Fix #11927
2017-06-30[RyuJIT/ARM32] Return HFA struct (#12453)Hyeongseok Oh1-0/+218
* [RyuJIT/ARM32] Return HFA struct - Enable return HFA struct - Merge ARM32/ARM64 CodeGen::isStructReturn(GenTreePtr treeNode) - Merge ARM32/ARM64 CodeGen::genStructReturn(GenTreePtr treeNode) * Add comment Add TODO comment to optimize two-float loading
2017-06-29[RyuJIT/armel] Support `double` argument passingHanjoung Lee1-6/+4
- Fix for putting `double` arguments between Lowering and Codegen phase - Rename GenTreeMulLong to GenTreeMultiRegOp GT_PUTARG_REG could be GenTreeMultiRegOp on RyuJIT/arm Fix #12293
2017-06-28[RyuJIT/ARM32] Enable passing large split struct argument (#12050)Hyeongseok Oh1-0/+167
* [RyuJIT/ARM32] Enable passing large split struct This enables passing split struct larger than 16 bytes. To support splitted struct, it defines new GenTree type - GenTreePutArgSplit. GenTreePutArgSplit is similar with GenTreePutArgStk, but it is used for splitted struct only and it has additional field to save register information. GenTreePutArgSplit node is generated in lower phase. * Apply reviews: split struct argument passing - Fix some comments: genPutArgSplit, GenTreePutArgStk, GenTreePutArgSplit, NuwPutArg, ArgComplete - Add assertion check in genPutArgSplit, genCallInstruction - Rename variable: baseReg - Change flag for GenTreePutArgSplit: _TARGET_ARM && !LEGACY_BACKEND - Change type of gtOtherRegs in GenTreePutArgSplit - Remove duplicated code: NewPutArg - Implement spill & restore flag for GenTreePutArgSplit * Apply reviews - Rebase - Update managing spillFlag for split struct - Implement spill & restore code generation - Fix typos and rename variables - Fix bug related to print gentree for split struct * Fix bug and comments - Fix bug in regset.cpp - Add comments in morph.cpp's NYI_ARM - Fix comments' typo in lsraarmarcp.cpp
2017-06-20[RyuJIT/ARM32] Implement storing multi-reg/HFA return value at caller (#12294)Hyung-Kyu Choi1-1/+2
* [RyuJIT/ARM32] Initial implementation of multi-reg return Signed-off-by: Hyung-Kyu Choi <hk0110.choi@samsung.com> * [RyuJIT/ARM32] Update multi-reg return for ARM32 - Update comment - Remove wrong implementation - Handle HFA struct correctly by consitering type Signed-off-by: Hyung-Kyu Choi <hk0110.choi@samsung.com> * Update comments for GetABIReturnReg() and GetABIReturnRegs() - Remove and update obsolete comment - Fix format Signed-off-by: Hyung-Kyu Choi <hk0110.choi@samsung.com>
2017-06-08Merge pull request #11901 from CarolEidt/RegValCarol Eidt1-18/+8
Make containedness explicit
2017-06-08Merge pull request #12148 from mikedn/oper-dumpRussell C Hadley1-1/+1
Make JIT dumps more readable
2017-06-08[RyuJIT/armel] Support putting floating-point argsHanjoung Lee1-2/+23
- Make Lowering and LSRA be aware of armel argument push convention. - Implement codegen for GT_COPY that was newly created from `LowerArg()`. - Only `float` type is supported. (`double` is not supported yet.) Fix #11928
2017-06-07Merge pull request #12087 from sdmaclea/PR-JIT-AcquireRelease-SimpleCasesCarol Eidt1-8/+46
[Arm64] Pr jit acquire release simple cases
2017-06-08Make JIT dumps more readableMike Danes1-1/+1
Replace all uses of NodeName with OpName so we get proper names instead of symbols (e.g. ADD instead of +). Names stand out better, especially in JIT dumps where we use various symbols to draw tree lines.
2017-06-07Merge pull request #12122 from BruceForstall/CleanupEffectiveValBruce Forstall1-2/+2
Remove use of gtEffectiveVal in RyuJIT codegen
2017-06-07Make containedness explicitCarol Eidt1-18/+8
Eliminate the use of GTF_REG_VAL in RyuJIT and reuse the bit to mark nodes as contained. Abstract GTF_REG_VAL for legacy backend.
2017-06-06Remove use of gtEffectiveVal in RyuJIT codegenBruce Forstall1-2/+2
This is not required in RyuJIT at the codegen phase: COMMA and value-producing NOPs are no longer in place.
2017-06-05Merge pull request #11205 from mskvortsov/FixFloatingLdStBrian Sullivan1-0/+142
[RyuJIT/ARM32] Workaround vstr/vldr addressing modes limitations
2017-06-05Merge pull request #11884 from mikedn/arm-cmp-setccPat Gavlin1-0/+53
[WIP] Lower long compares that are materialized into a register for ARM32
2017-06-05[Arm64] Respond to review commentsSteve MacLean, Qualcomm Datacenter Technologies, Inc1-3/+5
2017-06-05[Arm64] Use Load Acquire when practical for genCodeForIndirSteve MacLean1-8/+44
2017-06-05Adapt shared genLeaInstruction for arm32Mikhail Skvortcov1-8/+25
2017-06-05Move arm64's genLeaInstruction into codegenarmarch.cppMikhail Skvortcov1-0/+125
2017-06-02Merge pull request #12003 from sjsinju/reg1_reg2_planBCarol Eidt1-27/+29
[RyuJit/ARM32] Fix wrong behavior of UINT->CHAR casting
2017-06-02Add ARM32 support for GT_SETCC/GT_CMP/GTF_SET_FLAGSMike Danes1-0/+53
2017-06-01[Arm64] Use inner shareable for instGen_MemoryBarrierSteve MacLean, Qualcomm Datacenter Technologies, Inc1-2/+2
2017-06-01[Arm64] Use half barriers for IL Volatile implementationSteve MacLean1-2/+12
2017-05-31[RyuJit/ARM32] Fix wrong behavior of UINT->CHAR castingsjsujinkim1-27/+29
'JIT\Regression\CLR-x86-JIT\V1-M11-Beta1\b44879\b44879\b44879.cmd' When UINT cast to CHAR, MOV instruction had been emitted with R0 to R0 for extending the type. It is wrong behavior to cast. In case of INT to BOOL casting, that use uxtb instruction to extend BOOL type. So this PR would use a uxth instruction too insted of wrong mov instruction. @dotnet/arm64-contrib @dotnet/arm32-contrib Please make sure this code is okay.
2017-05-30RyuJIT/arm32: Fix double argument passingMikhail Skvortcov1-0/+8
2017-05-30Merge pull request #11972 from hseok-oh/ryujit/issue_11971Carol Eidt1-1/+1
[RyuJIT/ARM32] Fix offset of struct argument when using stack
2017-05-30[RyuJIT/ARM32] Fix assertion failed 'remainingSize == TARGET_POINTER_SIZE'Hyeongseok Oh1-2/+1
Fix assertion failed by 'remainingSize == TARGET_POINTER_SIZE' Fix to check register allocation correctly
2017-05-30[RyuJIT/ARM32] Fix offset of struct argument when using stackHyeongseok Oh1-1/+1
Fix offset value when struct argument is passed on stack
2017-05-23Introduce GT_CMP and GT_SETCC(condition)Mike Danes1-2/+2
2017-05-22Handle INS_adr in emitIns_R_L on both arm32 and arm64Bruce Forstall1-4/+0
2017-05-22Merge pull request #11542 from BruceForstall/RefactorXarchCodegenBruce Forstall1-48/+28
Refactor xarch codegen