summaryrefslogtreecommitdiff
path: root/tests/src/JIT/Directed/PREFIX/unaligned/2/initobj.il
blob: a9baf60a0b8102a573587a0a0348976edcdd3a9b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.

.assembly extern legacy library mscorlib {}
.assembly extern System.Console
{
  .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A )
  .ver 4:0:0:0
}
.assembly initobj.exe{ //This byte field requests that this assembly not be verified at run time and corresponds to this C# declaration:
  //[assembly:System.Security.Permissions.SecurityPermissionAttribute( [mscorlib]System.Security.Permissions.SecurityAction.RequestMinimum, Flags=System.Security.Permissions.SecurityPermissionFlag.SkipVerification )]
  .permission reqmin ['mscorlib']System.Security.Permissions.SecurityPermissionAttribute ( "SkipVerification" = true )
                        }

.class public value sealed valClass{
	.field public int32		int32_Field
	.field public static int32	int32_SField
	.field public float32		float32_Field
	.field public static float32	float32_SField
	.field public int32*		int32_ptr_Field
	.field public static int32*	int32_ptr_SField
}

.class public	_initoj {

	//-------------------------
	// Entry point - Main     -
	//-------------------------
	.method public static int32 main(class [mscorlib]System.String[]) {
	.entrypoint
	.locals	(value class valClass, int32)
	.maxstack	10
	//----------------
	// begin testing -
	//----------------
	
//Set all valClass fields to a known state
		ldloca	0
		ldc.i4	0xAB
		unaligned. 0x2
		stfld	int32 valClass::int32_Field	

		ldc.i4	0xCD
		stsfld	int32 valClass::int32_SField	
		
		ldloca	0
		ldc.r4	8.8
		unaligned. 0x2
		stfld	float32 valClass::float32_Field	

		ldc.r4	9.9
		stsfld	float32 valClass::float32_SField	

		ldloca	0
		ldloca	1
		unaligned. 0x2
		stfld	int32* valClass::int32_ptr_Field	

		ldloca	1
		stsfld	int32* valClass::int32_ptr_SField	

//Check the state of all valClass fields to be sure they were initialized correctly
		ldloc	0
		unaligned. 0x2
		ldfld	int32 valClass::int32_Field
		ldc.i4	0xAB
		bne.un	FAIL

		ldsfld	int32 valClass::int32_SField
		ldc.i4	0xCD
		bne.un	FAIL	

		ldloc	0
		unaligned. 0x2
		ldfld	float32 valClass::float32_Field
		ldc.r4	8.8
		bne.un	FAIL

		ldsfld	float32 valClass::float32_SField
		ldc.r4	9.9
		bne.un	FAIL	

		ldloc	0
		unaligned. 0x2
		ldfld	int32* valClass::int32_ptr_Field
		ldloca	1
		bne.un	FAIL

		ldsfld	int32* valClass::int32_ptr_SField
		ldloca	1
		bne.un	FAIL	

//Call initobj
		ldloca	0
		initobj valClass

//Make sure all fields are set to zero or null and all static fields are unchanged.
		ldloc	0
		unaligned. 0x2
		ldfld	int32 valClass::int32_Field
		ldc.i4	0x0
		bne.un	FAIL

		ldsfld	int32 valClass::int32_SField
		ldc.i4	0xCD
		bne.un	FAIL	

		ldloc	0
		unaligned. 0x2
		ldfld	float32 valClass::float32_Field
		ldc.r4	0.0
		bne.un	FAIL

		ldsfld	float32 valClass::float32_SField
		ldc.r4	9.9
		bne.un	FAIL	

		ldloc	0
		unaligned. 0x2
		ldfld	int32* valClass::int32_ptr_Field
		ldnull
		bne.un	FAIL

		ldsfld	int32* valClass::int32_ptr_SField
		ldloca	1
		bne.un	FAIL	


		PASS:
		ldc.i4	0x64
		ret
	//----------------
		FAIL:
		ldc.i4	0x0
		ret
	}
}