Register.cs 4.8 KB

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