summaryrefslogtreecommitdiff
path: root/tests/src/JIT/Directed/PREFIX/unaligned/1/arglist.il
blob: 2c86a525e3781fc1c2446347638117daf9590daa (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
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.


/*
CompareArgs() works as such:

CompareArgs(3,1,2,3,1,2,3)
Where arg0 is 1/2 the number of the
remaining arguments.

And the arguments 1,2,3 and 1,2,3 are
treated as two separate lists of size
arg0 whose elements are compared to one
another.

ie. in this case CompareArgs checks that
arg1==arg4, arg2==arg5, arg3==arg6.
*/

.assembly extern legacy library mscorlib {}
.assembly arglist.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 )]
                        }

.method static vararg int32 CompareArgs(int32){
.locals(int32 currentindex, int32 loopconstant)
.maxstack 10
.try{
	ldc.i4		1
	stloc		currentindex
	ldarg		0
	stloc		loopconstant
LOOP:	ldloc		currentindex
	ldc.i4		4
	mul
	arglist
	add
	unaligned. 0x1
	ldind.i4
	ldloc		currentindex
	ldloc		loopconstant
	add
	ldc.i4		4
	mul
	arglist
	add
	unaligned. 0x1
	ldind.i4
	ceq
	brfalse		EXITWITHFAIL
	ldloc		currentindex
	ldloc		loopconstant
	beq		EXITWITHPASS
	ldc.i4		1
	ldloc		currentindex
	add
	stloc		currentindex
	br		LOOP
	EXITWITHPASS:
	leave SUCCESS
	EXITWITHFAIL:
	leave FAIL
}catch [mscorlib]System.NullReferenceException{
	pop
	leave FAIL
}
SUCCESS:
	ldc.i4		0x64
	ret
FAIL:
	ldc.i4		0x0
REALLYDONE:
	ret
}

//-------------------------
// Entry point - Main     -
//-------------------------
.method static int32 main() {
.entrypoint
.locals	()
.maxstack	10

	ldc.i4	1
	ldc.i4	1
	ldc.i4	1
	call	vararg int32 CompareArgs(int32,...,int32,int32)
	brfalse	FAIL

	ldc.i4	4
	ldc.i4	2
	ldc.i4	3
	ldc.i4	4
	ldc.i4	5
	ldc.i4	2
	ldc.i4	3
	ldc.i4	4
	ldc.i4	5
	call	vararg int32 CompareArgs(int32,...,int32,int32,int32,int32,int32,int32,int32,int32)
	brfalse	FAIL


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