Register.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. // Licensed to the .NET Foundation under one or more agreements.
  2. // The .NET Foundation licenses this file to you under the MIT license.
  3. // See the LICENSE file in the project root for more information.
  4. #nullable enable
  5. using System.Runtime.InteropServices;
  6. namespace System.Numerics
  7. {
  8. /// <summary>
  9. /// A structure describing the layout of an SSE2-sized register.
  10. /// Contains overlapping fields representing the set of valid numeric types.
  11. /// Allows the generic Vector'T struct to contain an explicit field layout.
  12. /// </summary>
  13. [StructLayout(LayoutKind.Explicit)]
  14. internal struct Register
  15. {
  16. #region Internal Storage Fields
  17. // Internal System.Byte Fields
  18. [FieldOffset(0)]
  19. internal byte byte_0;
  20. [FieldOffset(1)]
  21. internal byte byte_1;
  22. [FieldOffset(2)]
  23. internal byte byte_2;
  24. [FieldOffset(3)]
  25. internal byte byte_3;
  26. [FieldOffset(4)]
  27. internal byte byte_4;
  28. [FieldOffset(5)]
  29. internal byte byte_5;
  30. [FieldOffset(6)]
  31. internal byte byte_6;
  32. [FieldOffset(7)]
  33. internal byte byte_7;
  34. [FieldOffset(8)]
  35. internal byte byte_8;
  36. [FieldOffset(9)]
  37. internal byte byte_9;
  38. [FieldOffset(10)]
  39. internal byte byte_10;
  40. [FieldOffset(11)]
  41. internal byte byte_11;
  42. [FieldOffset(12)]
  43. internal byte byte_12;
  44. [FieldOffset(13)]
  45. internal byte byte_13;
  46. [FieldOffset(14)]
  47. internal byte byte_14;
  48. [FieldOffset(15)]
  49. internal byte byte_15;
  50. // Internal System.SByte Fields
  51. [FieldOffset(0)]
  52. internal sbyte sbyte_0;
  53. [FieldOffset(1)]
  54. internal sbyte sbyte_1;
  55. [FieldOffset(2)]
  56. internal sbyte sbyte_2;
  57. [FieldOffset(3)]
  58. internal sbyte sbyte_3;
  59. [FieldOffset(4)]
  60. internal sbyte sbyte_4;
  61. [FieldOffset(5)]
  62. internal sbyte sbyte_5;
  63. [FieldOffset(6)]
  64. internal sbyte sbyte_6;
  65. [FieldOffset(7)]
  66. internal sbyte sbyte_7;
  67. [FieldOffset(8)]
  68. internal sbyte sbyte_8;
  69. [FieldOffset(9)]
  70. internal sbyte sbyte_9;
  71. [FieldOffset(10)]
  72. internal sbyte sbyte_10;
  73. [FieldOffset(11)]
  74. internal sbyte sbyte_11;
  75. [FieldOffset(12)]
  76. internal sbyte sbyte_12;
  77. [FieldOffset(13)]
  78. internal sbyte sbyte_13;
  79. [FieldOffset(14)]
  80. internal sbyte sbyte_14;
  81. [FieldOffset(15)]
  82. internal sbyte sbyte_15;
  83. // Internal System.UInt16 Fields
  84. [FieldOffset(0)]
  85. internal ushort uint16_0;
  86. [FieldOffset(2)]
  87. internal ushort uint16_1;
  88. [FieldOffset(4)]
  89. internal ushort uint16_2;
  90. [FieldOffset(6)]
  91. internal ushort uint16_3;
  92. [FieldOffset(8)]
  93. internal ushort uint16_4;
  94. [FieldOffset(10)]
  95. internal ushort uint16_5;
  96. [FieldOffset(12)]
  97. internal ushort uint16_6;
  98. [FieldOffset(14)]
  99. internal ushort uint16_7;
  100. // Internal System.Int16 Fields
  101. [FieldOffset(0)]
  102. internal short int16_0;
  103. [FieldOffset(2)]
  104. internal short int16_1;
  105. [FieldOffset(4)]
  106. internal short int16_2;
  107. [FieldOffset(6)]
  108. internal short int16_3;
  109. [FieldOffset(8)]
  110. internal short int16_4;
  111. [FieldOffset(10)]
  112. internal short int16_5;
  113. [FieldOffset(12)]
  114. internal short int16_6;
  115. [FieldOffset(14)]
  116. internal short int16_7;
  117. // Internal System.UInt32 Fields
  118. [FieldOffset(0)]
  119. internal uint uint32_0;
  120. [FieldOffset(4)]
  121. internal uint uint32_1;
  122. [FieldOffset(8)]
  123. internal uint uint32_2;
  124. [FieldOffset(12)]
  125. internal uint uint32_3;
  126. // Internal System.Int32 Fields
  127. [FieldOffset(0)]
  128. internal int int32_0;
  129. [FieldOffset(4)]
  130. internal int int32_1;
  131. [FieldOffset(8)]
  132. internal int int32_2;
  133. [FieldOffset(12)]
  134. internal int int32_3;
  135. // Internal System.UInt64 Fields
  136. [FieldOffset(0)]
  137. internal ulong uint64_0;
  138. [FieldOffset(8)]
  139. internal ulong uint64_1;
  140. // Internal System.Int64 Fields
  141. [FieldOffset(0)]
  142. internal long int64_0;
  143. [FieldOffset(8)]
  144. internal long int64_1;
  145. // Internal System.Single Fields
  146. [FieldOffset(0)]
  147. internal float single_0;
  148. [FieldOffset(4)]
  149. internal float single_1;
  150. [FieldOffset(8)]
  151. internal float single_2;
  152. [FieldOffset(12)]
  153. internal float single_3;
  154. // Internal System.Double Fields
  155. [FieldOffset(0)]
  156. internal double double_0;
  157. [FieldOffset(8)]
  158. internal double double_1;
  159. #endregion Internal Storage Fields
  160. }
  161. }