summaryrefslogtreecommitdiff
path: root/tests/src/JIT
diff options
context:
space:
mode:
authorRuss Keldorph <Russ.Keldorph@microsoft.com>2016-04-12 11:49:58 -0700
committerRuss Keldorph <Russ.Keldorph@microsoft.com>2016-04-12 20:56:29 -0700
commit98d914bc0c9b167ee3e7abd3f4aee636f88cba59 (patch)
tree2b1775f98e1f0f8c7a0453e2bc9fdf2fc8cfb67a /tests/src/JIT
parent5d55afa3600904dd2376db9af9838f2fbba27945 (diff)
downloadcoreclr-98d914bc0c9b167ee3e7abd3f4aee636f88cba59.tar.gz
coreclr-98d914bc0c9b167ee3e7abd3f4aee636f88cba59.tar.bz2
coreclr-98d914bc0c9b167ee3e7abd3f4aee636f88cba59.zip
Port arglist tests for x86 and ARM
Arglist tests, which are only valid on Windows, have non-x64 versions that needed to be ported.
Diffstat (limited to 'tests/src/JIT')
-rw-r--r--tests/src/JIT/Directed/PREFIX/unaligned/1/arglist.il110
-rw-r--r--tests/src/JIT/Directed/PREFIX/unaligned/1/arglist.ilproj7
-rw-r--r--tests/src/JIT/Directed/PREFIX/unaligned/1/arglist64.il5
-rw-r--r--tests/src/JIT/Directed/PREFIX/unaligned/1/arglistARM.il121
-rw-r--r--tests/src/JIT/Directed/PREFIX/unaligned/2/arglist.il111
-rw-r--r--tests/src/JIT/Directed/PREFIX/unaligned/2/arglist.ilproj7
-rw-r--r--tests/src/JIT/Directed/PREFIX/unaligned/2/arglist64.il5
-rw-r--r--tests/src/JIT/Directed/PREFIX/unaligned/2/arglistARM.il121
-rw-r--r--tests/src/JIT/Directed/PREFIX/unaligned/4/arglist.il110
-rw-r--r--tests/src/JIT/Directed/PREFIX/unaligned/4/arglist.ilproj7
-rw-r--r--tests/src/JIT/Directed/PREFIX/unaligned/4/arglist64.il5
-rw-r--r--tests/src/JIT/Directed/PREFIX/unaligned/4/arglistARM.il120
-rw-r--r--tests/src/JIT/Directed/PREFIX/volatile/1/arglist.il112
-rw-r--r--tests/src/JIT/Directed/PREFIX/volatile/1/arglist.ilproj7
-rw-r--r--tests/src/JIT/Directed/PREFIX/volatile/1/arglist64.il5
-rw-r--r--tests/src/JIT/Directed/PREFIX/volatile/1/arglistARM.il122
16 files changed, 947 insertions, 28 deletions
diff --git a/tests/src/JIT/Directed/PREFIX/unaligned/1/arglist.il b/tests/src/JIT/Directed/PREFIX/unaligned/1/arglist.il
new file mode 100644
index 0000000000..2c86a525e3
--- /dev/null
+++ b/tests/src/JIT/Directed/PREFIX/unaligned/1/arglist.il
@@ -0,0 +1,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
+}
diff --git a/tests/src/JIT/Directed/PREFIX/unaligned/1/arglist.ilproj b/tests/src/JIT/Directed/PREFIX/unaligned/1/arglist.ilproj
index 9f058102af..aaa821522c 100644
--- a/tests/src/JIT/Directed/PREFIX/unaligned/1/arglist.ilproj
+++ b/tests/src/JIT/Directed/PREFIX/unaligned/1/arglist.ilproj
@@ -29,7 +29,10 @@
</PropertyGroup>
<ItemGroup>
- <Compile Include="arglist64.il" />
+ <Compile Condition="'$(Platform)' == 'x86'" Include="arglist.il" />
+ <Compile Condition="'$(Platform)' == 'x64'" Include="arglist64.il" />
+ <Compile Condition="'$(Platform)' == 'arm'" Include="arglistARM.il" />
+ <Compile Condition="'$(Platform)' == 'arm64'" Include="arglist64.il" />
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
@@ -40,4 +43,4 @@
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
<PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
</PropertyGroup>
-</Project> \ No newline at end of file
+</Project>
diff --git a/tests/src/JIT/Directed/PREFIX/unaligned/1/arglist64.il b/tests/src/JIT/Directed/PREFIX/unaligned/1/arglist64.il
index 421c166bd2..e04456d6a0 100644
--- a/tests/src/JIT/Directed/PREFIX/unaligned/1/arglist64.il
+++ b/tests/src/JIT/Directed/PREFIX/unaligned/1/arglist64.il
@@ -19,11 +19,6 @@ arg1==arg4, arg2==arg5, arg3==arg6.
*/
.assembly extern legacy library mscorlib {}
-.assembly extern System.Console
-{
- .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A )
- .ver 4:0:0:0
-}
.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 )]
}
diff --git a/tests/src/JIT/Directed/PREFIX/unaligned/1/arglistARM.il b/tests/src/JIT/Directed/PREFIX/unaligned/1/arglistARM.il
new file mode 100644
index 0000000000..1b6b00e94c
--- /dev/null
+++ b/tests/src/JIT/Directed/PREFIX/unaligned/1/arglistARM.il
@@ -0,0 +1,121 @@
+// 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.
+
+The vararg cookie in the case of x86 and ARM
+is after/before the declared arguments respectively:
+(from Compiler::lvaInitTypeRef() in lclvars.cpp)
+x86 args look something like this:
+[this ptr] [hidden return buffer] [declared arguments]* [generic context] [var arg cookie]
+ARM is closer to the native ABI:
+[hidden return buffer] [this ptr] [generic context] [var arg cookie] [declared arguments]*
+
+*/
+
+.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 2
+ 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
+ ldc.i4 1
+ add
+ 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
+}
diff --git a/tests/src/JIT/Directed/PREFIX/unaligned/2/arglist.il b/tests/src/JIT/Directed/PREFIX/unaligned/2/arglist.il
new file mode 100644
index 0000000000..c619ceee0b
--- /dev/null
+++ b/tests/src/JIT/Directed/PREFIX/unaligned/2/arglist.il
@@ -0,0 +1,111 @@
+// 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. 0x2
+ ldind.i4
+ ldloc currentindex
+ ldloc loopconstant
+ add
+ ldc.i4 4
+ mul
+ arglist
+ add
+ unaligned. 0x2
+ 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
+}
diff --git a/tests/src/JIT/Directed/PREFIX/unaligned/2/arglist.ilproj b/tests/src/JIT/Directed/PREFIX/unaligned/2/arglist.ilproj
index 9f058102af..aaa821522c 100644
--- a/tests/src/JIT/Directed/PREFIX/unaligned/2/arglist.ilproj
+++ b/tests/src/JIT/Directed/PREFIX/unaligned/2/arglist.ilproj
@@ -29,7 +29,10 @@
</PropertyGroup>
<ItemGroup>
- <Compile Include="arglist64.il" />
+ <Compile Condition="'$(Platform)' == 'x86'" Include="arglist.il" />
+ <Compile Condition="'$(Platform)' == 'x64'" Include="arglist64.il" />
+ <Compile Condition="'$(Platform)' == 'arm'" Include="arglistARM.il" />
+ <Compile Condition="'$(Platform)' == 'arm64'" Include="arglist64.il" />
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
@@ -40,4 +43,4 @@
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
<PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
</PropertyGroup>
-</Project> \ No newline at end of file
+</Project>
diff --git a/tests/src/JIT/Directed/PREFIX/unaligned/2/arglist64.il b/tests/src/JIT/Directed/PREFIX/unaligned/2/arglist64.il
index 7e2fbc52c4..8ec67bf952 100644
--- a/tests/src/JIT/Directed/PREFIX/unaligned/2/arglist64.il
+++ b/tests/src/JIT/Directed/PREFIX/unaligned/2/arglist64.il
@@ -19,11 +19,6 @@ arg1==arg4, arg2==arg5, arg3==arg6.
*/
.assembly extern legacy library mscorlib {}
-.assembly extern System.Console
-{
- .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A )
- .ver 4:0:0:0
-}
.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 )]
}
diff --git a/tests/src/JIT/Directed/PREFIX/unaligned/2/arglistARM.il b/tests/src/JIT/Directed/PREFIX/unaligned/2/arglistARM.il
new file mode 100644
index 0000000000..f3b54f9af6
--- /dev/null
+++ b/tests/src/JIT/Directed/PREFIX/unaligned/2/arglistARM.il
@@ -0,0 +1,121 @@
+// 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.
+
+The vararg cookie in the case of x86 and ARM
+is after/before the declared arguments respectively:
+(from Compiler::lvaInitTypeRef() in lclvars.cpp)
+x86 args look something like this:
+[this ptr] [hidden return buffer] [declared arguments]* [generic context] [var arg cookie]
+ARM is closer to the native ABI:
+[hidden return buffer] [this ptr] [generic context] [var arg cookie] [declared arguments]*
+*/
+
+.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 2
+ stloc currentindex
+ ldarg 0
+ stloc loopconstant
+LOOP: ldloc currentindex
+ ldc.i4 4
+ mul
+ arglist
+ add
+ unaligned. 0x2
+ ldind.i4
+ ldloc currentindex
+ ldloc loopconstant
+ add
+ ldc.i4 4
+ mul
+ arglist
+ add
+ unaligned. 0x2
+ ldind.i4
+ ceq
+ brfalse EXITWITHFAIL
+ ldloc currentindex
+ ldloc loopconstant
+ ldc.i4 1
+ add
+ 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
+}
diff --git a/tests/src/JIT/Directed/PREFIX/unaligned/4/arglist.il b/tests/src/JIT/Directed/PREFIX/unaligned/4/arglist.il
new file mode 100644
index 0000000000..53a385292b
--- /dev/null
+++ b/tests/src/JIT/Directed/PREFIX/unaligned/4/arglist.il
@@ -0,0 +1,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. 0x4
+ ldind.i4
+ ldloc currentindex
+ ldloc loopconstant
+ add
+ ldc.i4 4
+ mul
+ arglist
+ add
+ unaligned. 0x4
+ 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
+}
diff --git a/tests/src/JIT/Directed/PREFIX/unaligned/4/arglist.ilproj b/tests/src/JIT/Directed/PREFIX/unaligned/4/arglist.ilproj
index 9f058102af..aaa821522c 100644
--- a/tests/src/JIT/Directed/PREFIX/unaligned/4/arglist.ilproj
+++ b/tests/src/JIT/Directed/PREFIX/unaligned/4/arglist.ilproj
@@ -29,7 +29,10 @@
</PropertyGroup>
<ItemGroup>
- <Compile Include="arglist64.il" />
+ <Compile Condition="'$(Platform)' == 'x86'" Include="arglist.il" />
+ <Compile Condition="'$(Platform)' == 'x64'" Include="arglist64.il" />
+ <Compile Condition="'$(Platform)' == 'arm'" Include="arglistARM.il" />
+ <Compile Condition="'$(Platform)' == 'arm64'" Include="arglist64.il" />
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
@@ -40,4 +43,4 @@
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
<PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
</PropertyGroup>
-</Project> \ No newline at end of file
+</Project>
diff --git a/tests/src/JIT/Directed/PREFIX/unaligned/4/arglist64.il b/tests/src/JIT/Directed/PREFIX/unaligned/4/arglist64.il
index 23622252d6..60fd8add1b 100644
--- a/tests/src/JIT/Directed/PREFIX/unaligned/4/arglist64.il
+++ b/tests/src/JIT/Directed/PREFIX/unaligned/4/arglist64.il
@@ -19,11 +19,6 @@ arg1==arg4, arg2==arg5, arg3==arg6.
*/
.assembly extern legacy library mscorlib {}
-.assembly extern System.Console
-{
- .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A )
- .ver 4:0:0:0
-}
.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 )]
}
diff --git a/tests/src/JIT/Directed/PREFIX/unaligned/4/arglistARM.il b/tests/src/JIT/Directed/PREFIX/unaligned/4/arglistARM.il
new file mode 100644
index 0000000000..628896f561
--- /dev/null
+++ b/tests/src/JIT/Directed/PREFIX/unaligned/4/arglistARM.il
@@ -0,0 +1,120 @@
+// 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.
+
+The vararg cookie in the case of x86 and ARM
+is after/before the declared arguments respectively:
+(from Compiler::lvaInitTypeRef() in lclvars.cpp)
+x86 args look something like this:
+[this ptr] [hidden return buffer] [declared arguments]* [generic context] [var arg cookie]
+ARM is closer to the native ABI:
+[hidden return buffer] [this ptr] [generic context] [var arg cookie] [declared arguments]*
+*/
+
+.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 2
+ stloc currentindex
+ ldarg 0
+ stloc loopconstant
+LOOP: ldloc currentindex
+ ldc.i4 4
+ mul
+ arglist
+ add
+ unaligned. 0x4
+ ldind.i4
+ ldloc currentindex
+ ldloc loopconstant
+ add
+ ldc.i4 4
+ mul
+ arglist
+ add
+ unaligned. 0x4
+ ldind.i4
+ ceq
+ brfalse EXITWITHFAIL
+ ldloc currentindex
+ ldloc loopconstant
+ ldc.i4 1
+ add
+ 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
+}
diff --git a/tests/src/JIT/Directed/PREFIX/volatile/1/arglist.il b/tests/src/JIT/Directed/PREFIX/volatile/1/arglist.il
new file mode 100644
index 0000000000..5a42942793
--- /dev/null
+++ b/tests/src/JIT/Directed/PREFIX/volatile/1/arglist.il
@@ -0,0 +1,112 @@
+// 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
+ volatile.
+ unaligned. 0x1
+ ldind.i4
+ ldloc currentindex
+ ldloc loopconstant
+ add
+ ldc.i4 4
+ mul
+ arglist
+ add
+ volatile.
+ 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
+}
diff --git a/tests/src/JIT/Directed/PREFIX/volatile/1/arglist.ilproj b/tests/src/JIT/Directed/PREFIX/volatile/1/arglist.ilproj
index 9f058102af..aaa821522c 100644
--- a/tests/src/JIT/Directed/PREFIX/volatile/1/arglist.ilproj
+++ b/tests/src/JIT/Directed/PREFIX/volatile/1/arglist.ilproj
@@ -29,7 +29,10 @@
</PropertyGroup>
<ItemGroup>
- <Compile Include="arglist64.il" />
+ <Compile Condition="'$(Platform)' == 'x86'" Include="arglist.il" />
+ <Compile Condition="'$(Platform)' == 'x64'" Include="arglist64.il" />
+ <Compile Condition="'$(Platform)' == 'arm'" Include="arglistARM.il" />
+ <Compile Condition="'$(Platform)' == 'arm64'" Include="arglist64.il" />
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
@@ -40,4 +43,4 @@
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
<PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
</PropertyGroup>
-</Project> \ No newline at end of file
+</Project>
diff --git a/tests/src/JIT/Directed/PREFIX/volatile/1/arglist64.il b/tests/src/JIT/Directed/PREFIX/volatile/1/arglist64.il
index 82a8c5b253..77ae3e5c06 100644
--- a/tests/src/JIT/Directed/PREFIX/volatile/1/arglist64.il
+++ b/tests/src/JIT/Directed/PREFIX/volatile/1/arglist64.il
@@ -19,11 +19,6 @@ arg1==arg4, arg2==arg5, arg3==arg6.
*/
.assembly extern legacy library mscorlib {}
-.assembly extern System.Console
-{
- .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A )
- .ver 4:0:0:0
-}
.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 )]
}
diff --git a/tests/src/JIT/Directed/PREFIX/volatile/1/arglistARM.il b/tests/src/JIT/Directed/PREFIX/volatile/1/arglistARM.il
new file mode 100644
index 0000000000..e6b04ab45c
--- /dev/null
+++ b/tests/src/JIT/Directed/PREFIX/volatile/1/arglistARM.il
@@ -0,0 +1,122 @@
+// 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.
+
+The vararg cookie in the case of x86 and ARM
+is after/before the declared arguments respectively:
+(from Compiler::lvaInitTypeRef() in lclvars.cpp)
+x86 args look something like this:
+[this ptr] [hidden return buffer] [declared arguments]* [generic context] [var arg cookie]
+ARM is closer to the native ABI:
+[hidden return buffer] [this ptr] [generic context] [var arg cookie] [declared arguments]*
+*/
+
+.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 2
+ stloc currentindex
+ ldarg 0
+ stloc loopconstant
+LOOP: ldloc currentindex
+ ldc.i4 4
+ mul
+ arglist
+ add
+ volatile.
+ unaligned. 0x1
+ ldind.i4
+ ldloc currentindex
+ ldloc loopconstant
+ add
+ ldc.i4 4
+ mul
+ arglist
+ add
+ volatile.
+ unaligned. 0x1
+ ldind.i4
+ ceq
+ brfalse EXITWITHFAIL
+ ldloc currentindex
+ ldloc loopconstant
+ ldc.i4 1
+ add
+ 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
+}