Age | Commit message (Collapse) | Author | Files | Lines |
|
[RyuJIT/ARM32] Tailcall: passing struct argument
|
|
[RyuJIT/ARM32] Remove NYI: using zero register
|
|
Fix bug in tailcall(jmp) to pass struct argument
Remove NYI for HFA struct passing
|
|
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.
|
|
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.
|
|
Fix stack overflow on codegen phase
Array size problem for reference map in genPutArgStk()
|
|
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.
|
|
[RyuJIT/ARM32] Internal register candadate for split struct argument
|
|
|
|
YongseopKim/ryujit/arm32/add_nyi_promoted_struct_in_genPutArgStk
[RyuJIT/ARM32] Add NYI_ARM for promoted struct to genPutArgStk
|
|
- 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).
|
|
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.
|
|
[RyuJIT/armel] Passing stack double arguments
|
|
Enable passing split struct (less than 16 bytes)
- LSRA phase
- Codegen phase
|
|
[RyuJIT/ARM32] Add NYI_ARM for handling promoted struct
|
|
- 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.
|
|
* [RyuJIT/ARM32] Fix assertion failed 'gcPtrCount == 0'
Change wrong gcPtrCount's value from gtNumSlots to gtNumberReferenceSlots of GenTreePutArgStk
* Fix a formatting error
|
|
[RyuJIT/armel] Move returned float to float reg
|
|
Returned float values are in r0(float) or r0:r1(double).
These values must be moved to proper float register after call.
Fix #12574
|
|
Fix #11927
|
|
* [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
|
|
- 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
|
|
* [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
|
|
* [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>
|
|
Make containedness explicit
|
|
Make JIT dumps more readable
|
|
- 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
|
|
[Arm64] Pr jit acquire release simple cases
|
|
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.
|
|
Remove use of gtEffectiveVal in RyuJIT codegen
|
|
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.
|
|
This is not required in RyuJIT at the codegen phase: COMMA and
value-producing NOPs are no longer in place.
|
|
[RyuJIT/ARM32] Workaround vstr/vldr addressing modes limitations
|
|
[WIP] Lower long compares that are materialized into a register for ARM32
|
|
|
|
|
|
|
|
|
|
[RyuJit/ARM32] Fix wrong behavior of UINT->CHAR casting
|
|
|
|
|
|
|
|
'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.
|
|
|
|
[RyuJIT/ARM32] Fix offset of struct argument when using stack
|
|
Fix assertion failed by 'remainingSize == TARGET_POINTER_SIZE'
Fix to check register allocation correctly
|
|
Fix offset value when struct argument is passed on stack
|
|
|
|
|
|
Refactor xarch codegen
|