2 using System.Runtime.InteropServices;
4 [StructLayout (LayoutKind.Sequential)]
7 public winx64_struct1 (byte ia)
14 [StructLayout (LayoutKind.Sequential)]
17 public winx64_struct2 (byte ia, byte ib)
27 [StructLayout (LayoutKind.Sequential)]
30 public winx64_struct3 (byte ia, byte ib, short ic)
42 [StructLayout (LayoutKind.Sequential)]
45 public winx64_struct4 (byte ia, byte ib, short ic, uint id)
59 [StructLayout (LayoutKind.Sequential)]
62 public winx64_struct5 (byte ia, byte ib, byte ic)
74 [StructLayout (LayoutKind.Sequential)]
77 public winx64_struct6 (winx64_struct1 ia, short ib, byte ic)
84 public winx64_struct1 a;
89 [StructLayout (LayoutKind.Sequential)]
90 struct winx64_floatStruct
92 public winx64_floatStruct (float ia, float ib)
102 [StructLayout (LayoutKind.Sequential)]
103 struct winx64_doubleStruct
105 public winx64_doubleStruct (double ia)
115 [DllImport ("libtest")]
116 static extern int mono_test_Winx64_struct1_in ([MarshalAs (UnmanagedType.Struct)] winx64_struct1 var);
118 [DllImport ("libtest")]
119 static extern int mono_test_Winx64_struct2_in ([MarshalAs (UnmanagedType.Struct)] winx64_struct2 var);
121 [DllImport ("libtest")]
122 static extern int mono_test_Winx64_struct3_in ([MarshalAs (UnmanagedType.Struct)] winx64_struct3 var);
124 [DllImport ("libtest")]
125 static extern int mono_test_Winx64_struct4_in ([MarshalAs (UnmanagedType.Struct)] winx64_struct4 var);
127 [DllImport ("libtest")]
128 static extern int mono_test_Winx64_struct5_in ([MarshalAs (UnmanagedType.Struct)] winx64_struct5 var);
130 [DllImport ("libtest")]
131 static extern int mono_test_Winx64_struct6_in ([MarshalAs (UnmanagedType.Struct)] winx64_struct6 var);
133 [DllImport ("libtest")]
134 static extern int mono_test_Winx64_structs_in1 ([MarshalAs (UnmanagedType.Struct)] winx64_struct1 var1,
135 [MarshalAs (UnmanagedType.Struct)] winx64_struct2 var2,
136 [MarshalAs (UnmanagedType.Struct)] winx64_struct3 var3,
137 [MarshalAs (UnmanagedType.Struct)] winx64_struct4 var4);
139 [DllImport ("libtest")]
140 static extern int mono_test_Winx64_structs_in2 ([MarshalAs (UnmanagedType.Struct)] winx64_struct1 var1,
141 [MarshalAs (UnmanagedType.Struct)] winx64_struct1 var2,
142 [MarshalAs (UnmanagedType.Struct)] winx64_struct1 var3,
143 [MarshalAs (UnmanagedType.Struct)] winx64_struct1 var4,
144 [MarshalAs (UnmanagedType.Struct)] winx64_struct1 var5);
146 [DllImport ("libtest")]
147 static extern int mono_test_Winx64_structs_in3 ([MarshalAs (UnmanagedType.Struct)] winx64_struct1 var1,
148 [MarshalAs (UnmanagedType.Struct)] winx64_struct5 var2,
149 [MarshalAs (UnmanagedType.Struct)] winx64_struct1 var3,
150 [MarshalAs (UnmanagedType.Struct)] winx64_struct5 var4,
151 [MarshalAs (UnmanagedType.Struct)] winx64_struct1 var5,
152 [MarshalAs (UnmanagedType.Struct)] winx64_struct5 var6);
154 [DllImport ("libtest")]
155 [return:MarshalAs (UnmanagedType.Struct)]
156 static extern winx64_struct1 mono_test_Winx64_struct1_ret ();
158 [DllImport ("libtest")]
159 [return: MarshalAs (UnmanagedType.Struct)]
160 static extern winx64_struct2 mono_test_Winx64_struct2_ret ();
162 [DllImport ("libtest")]
163 [return: MarshalAs (UnmanagedType.Struct)]
164 static extern winx64_struct3 mono_test_Winx64_struct3_ret ();
166 [DllImport ("libtest")]
167 [return: MarshalAs (UnmanagedType.Struct)]
168 static extern winx64_struct4 mono_test_Winx64_struct4_ret ();
170 [DllImport ("libtest")]
171 [return: MarshalAs (UnmanagedType.Struct)]
172 static extern winx64_struct5 mono_test_Winx64_struct5_ret ();
174 [DllImport ("libtest")]
175 [return: MarshalAs (UnmanagedType.Struct)]
176 static extern winx64_struct1 mono_test_Winx64_struct1_ret_5_args (byte a, byte b, byte c, byte d, byte e);
178 [DllImport ("libtest")]
179 [return: MarshalAs (UnmanagedType.Struct)]
180 static extern winx64_struct5 mono_test_Winx64_struct5_ret6_args (byte a, byte b, byte c, byte d, byte e );
182 [DllImport ("libtest")]
183 static extern int mono_test_Winx64_floatStruct ([MarshalAs (UnmanagedType.Struct)] winx64_floatStruct var);
185 [DllImport ("libtest")]
186 static extern int mono_test_Winx64_doubleStruct ([MarshalAs (UnmanagedType.Struct)] winx64_doubleStruct var);
188 public delegate int managed_struct1_delegate ([MarshalAs (UnmanagedType.Struct)] winx64_struct1 var);
190 [DllImport ("libtest")]
191 static extern int mono_test_managed_Winx64_struct1_in (managed_struct1_delegate func);
193 private static bool enableBroken = false;
195 static int Main (string[] args)
197 return TestDriver.RunTests (typeof (winx64structs), args);
200 public static int test_0_In_Args_Value_In_RCX ()
204 winx64_struct1 t_winx64_struct1 = new winx64_struct1 (123);
206 if ((retCode = mono_test_Winx64_struct1_in (t_winx64_struct1)) != 0)
207 return 100 + retCode;
209 winx64_struct2 t_winx64_struct2 = new winx64_struct2 (4, 5);
211 if ((retCode = mono_test_Winx64_struct2_in (t_winx64_struct2)) != 0)
212 return 200 + retCode;
214 winx64_struct3 t_winx64_struct3 = new winx64_struct3 (4, 5, 0x1234);
216 if ((retCode = mono_test_Winx64_struct3_in (t_winx64_struct3)) != 0)
217 return 300 + retCode;
219 winx64_struct4 t_winx64_struct4 = new winx64_struct4 (4, 5, 0x1234, 0x87654321);
221 if ((retCode = mono_test_Winx64_struct4_in (t_winx64_struct4)) != 0)
222 return 400 + retCode;
224 winx64_floatStruct t_winx64_floatStruct = new winx64_floatStruct (5.5F, 9.5F);
226 if ((retCode = mono_test_Winx64_floatStruct (t_winx64_floatStruct)) != 0)
227 return 500 + retCode;
229 winx64_doubleStruct t_winx64_doubleStruct = new winx64_doubleStruct (5.5F);
231 if ((retCode = mono_test_Winx64_doubleStruct (t_winx64_doubleStruct)) != 0)
232 return 600 + retCode;
237 public static int test_0_In_Args_Values_In_Multiple_Registers ()
241 winx64_struct1 t_winx64_struct1 = new winx64_struct1 (123);
242 winx64_struct2 t_winx64_struct2 = new winx64_struct2 (4, 5);
243 winx64_struct3 t_winx64_struct3 = new winx64_struct3 (4, 5, 0x1234);
244 winx64_struct4 t_winx64_struct4 = new winx64_struct4 (4, 5, 0x1234, 0x87654321);
246 if ((retCode = mono_test_Winx64_structs_in1 (t_winx64_struct1, t_winx64_struct2,
247 t_winx64_struct3, t_winx64_struct4)) != 0)
248 return 100 + retCode;
254 public static int test_0_Ret_In_RAX ()
256 winx64_struct1 t_winx64_struct1 = mono_test_Winx64_struct1_ret ();
257 if (t_winx64_struct1.a != 123)
260 winx64_struct2 t_winx64_struct2 = mono_test_Winx64_struct2_ret ();
261 if (t_winx64_struct2.a != 4)
263 if (t_winx64_struct2.b != 5)
266 winx64_struct3 t_winx64_struct3 = mono_test_Winx64_struct3_ret ();
267 if (t_winx64_struct3.a != 4)
269 if (t_winx64_struct3.b != 5)
271 if (t_winx64_struct3.c != 0x1234)
274 winx64_struct4 t_winx64_struct4 = mono_test_Winx64_struct4_ret ();
275 if (t_winx64_struct4.a != 4)
277 if (t_winx64_struct4.b != 5)
279 if (t_winx64_struct4.c != 0x1234)
281 if (t_winx64_struct4.d != 0x87654321)
284 t_winx64_struct1 = mono_test_Winx64_struct1_ret_5_args (0x1, 0x0, 0x4, 0x10, 0x40);
285 if (t_winx64_struct1.a != 0x55)
291 public static int test_0_Ret_In_Address ()
293 winx64_struct5 t_winx64_struct5 = mono_test_Winx64_struct5_ret ();
294 if (t_winx64_struct5.a != 4)
296 if (t_winx64_struct5.b != 5)
298 if (t_winx64_struct5.c != 6)
301 t_winx64_struct5 = mono_test_Winx64_struct5_ret6_args (0x1, 0x4, 0x2, 0x8, 0x30);
302 if (t_winx64_struct5.a != 0x5)
304 if (t_winx64_struct5.b != 0xa)
306 if (t_winx64_struct5.c != 0x30)
312 public static int test_0_In_Args_Values_In_Registers_and_Stack ()
316 winx64_struct1 var1 = new winx64_struct1 (1);
317 winx64_struct1 var2 = new winx64_struct1 (2);
318 winx64_struct1 var3 = new winx64_struct1 (3);
319 winx64_struct1 var4 = new winx64_struct1 (4);
320 winx64_struct1 var5 = new winx64_struct1 (5);
322 if ((retCode = mono_test_Winx64_structs_in2 (var1, var2, var3, var4, var5)) != 0)
323 return 100 + retCode;
328 public static int test_0_In_Args_Values_In_Registers_with_Stack_and_On_Stack ()
332 winx64_struct1 var1 = new winx64_struct1 (1);
333 winx64_struct5 var2 = new winx64_struct5 (2, 3, 4);
334 winx64_struct1 var3 = new winx64_struct1 (5);
335 winx64_struct5 var4 = new winx64_struct5 (6, 7, 8);
336 winx64_struct1 var5 = new winx64_struct1 (9);
337 winx64_struct5 var6 = new winx64_struct5 (10, 11, 12);
339 if ((retCode = mono_test_Winx64_structs_in3 (var1, var2, var3, var4, var5, var6)) != 0)
340 return 100 + retCode;
345 public static int test_0_In_Args_Value_On_Stack_ADDR_In_RCX ()
349 winx64_struct5 t_winx64_struct5 = new winx64_struct5 (4, 5, 6);
350 t_winx64_struct5.a = 4;
351 t_winx64_struct5.b = 5;
352 t_winx64_struct5.c = 6;
354 if ((retCode = mono_test_Winx64_struct5_in (t_winx64_struct5)) != 0)
355 return 100 + retCode;
357 winx64_struct6 t_winx64_struct6 = new winx64_struct6 (new winx64_struct1 (4), 5, 6);
359 if ((retCode = mono_test_Winx64_struct6_in (t_winx64_struct6)) != 0)
360 return 200 + retCode;
365 public static int test_0_In_Args_Value_In_RCX_Managed ()
369 managed_struct1_delegate s1Del = new managed_struct1_delegate (managed_struct1_test);
371 if ((retCode = mono_test_managed_Winx64_struct1_in (s1Del)) != 0)
372 return 100 + retCode;
377 public static int managed_struct1_test (winx64_struct1 var)