summaryrefslogtreecommitdiff
path: root/Documentation
diff options
context:
space:
mode:
authorCarol Eidt <carol.eidt@microsoft.com>2016-06-07 13:26:18 -0700
committerCarol Eidt <carol.eidt@microsoft.com>2016-06-07 13:26:18 -0700
commitaf8079a67c2c83e5760402f6e87a232514a6061b (patch)
treef564c18e0c9c94746c3371bddbf2d12fbbf5b7a3 /Documentation
parent99ae542eafab693351819de623e0618ad6e5ae94 (diff)
downloadcoreclr-af8079a67c2c83e5760402f6e87a232514a6061b.tar.gz
coreclr-af8079a67c2c83e5760402f6e87a232514a6061b.tar.bz2
coreclr-af8079a67c2c83e5760402f6e87a232514a6061b.zip
Update first-class-structs.md
Add a link to Issue #5556, and correct some formatting issues.
Diffstat (limited to 'Documentation')
-rw-r--r--Documentation/design-docs/first-class-structs.md20
1 files changed, 12 insertions, 8 deletions
diff --git a/Documentation/design-docs/first-class-structs.md b/Documentation/design-docs/first-class-structs.md
index 33a0950cbb..3bf842f2fd 100644
--- a/Documentation/design-docs/first-class-structs.md
+++ b/Documentation/design-docs/first-class-structs.md
@@ -64,6 +64,10 @@ static foo getfoo() { return new foo(); }
(factor x8 slower than non-generic few calls loop).
* I am still investigating this issue.
+* \#5556 RuyJIT: structs in parameters and enregistering
+ * This also requires further investigation, but requires us to "Add support in prolog to extract fields, and
+ remove the restriction of not promoting incoming reg structs that have more than one field" - see [Dependent Work Items](https://github.com/dotnet/coreclr/blob/master/Documentation/design-docs/first-class-structs.md#dependent-work-items)
+
Normalizing Struct Types
------------------------
We would like to facilitate full enregistration of structs with the following properties:
@@ -199,14 +203,14 @@ All struct args imported as GT_OBJ, transformed as follows during morph:
* P_FULL promoted locals:
* Remain as a GT_LCL_VAR nodes, with the appropriate fixed-size struct type.
* Note that these may or may not be passed in registers.
-P_INDEP promoted locals:
-These are the ones where the fields don’t match the reg types
-GT_STRUCT (or something) for aggregating multiple fields into a single register
-Op1 is a lclVar for the first promoted field
-Op2 is the lclVar for the next field, OR another GT_STRUCT
-Bit offset for the second child
-All other cases (non-locals, OR P_DEP or non-promoted locals):
-GT_LIST of GT_IND for each half
+* P_INDEP promoted locals:
+ * These are the ones where the fields don’t match the reg types
+ GT_STRUCT (or something) for aggregating multiple fields into a single register
+ * Op1 is a lclVar for the first promoted field
+ * Op2 is the lclVar for the next field, OR another GT_STRUCT
+ * Bit offset for the second child
+* All other cases (non-locals, OR P_DEP or non-promoted locals):
+ * GT_LIST of GT_IND for each half
### Struct Return