summaryrefslogtreecommitdiff
path: root/tests/src/JIT/Regression/JitBlue/GitHub_8170/GitHub_8170.csproj
AgeCommit message (Collapse)AuthorFilesLines
2017-08-16Move less valuable tests to priority 1.Pat Gavlin1-8/+5
2017-03-17Delete unused ReferenceLocalMscorlib property from test proj files (#10250)Jan Kotas1-4/+0
Deleted a few other irrelevant properties as well while I was on it. Fixes #7711
2017-03-13Pick up new CoreFX packages and abandon old oneswtgodbe1-4/+0
2016-11-18Fix codegen for `(umod (gt_long) (const int))`.Pat Gavlin1-0/+46
When targeting x86, we opt not to use a helper call to implement the 64-bit unsigned modulus operator if we have a tree of either of the following forms: - `(umod ulong (x ulong) (cast ulong (const int const_val)))` - `(umod ulong (x ulong) (const ulong const_val))` where `const_val` falls in the range `[2, 0x3fffffff]`. We eventually decompose this into `(umod uint (gt_long lo hi) (const int const_val))`. This was then emitted as: mov eax, lo mov edx, hi mov reg, const_val div edx:eax reg Unfortunately, this generated code does not take into account the fact that the result of the modulus may not fit into 32 bits. This can cause an overflow exception at runtime despite the fact that the modulus originally produced a 64-bit result. This change fixes the code generation to check for overflow before performing the modulus and perform a 64-bit division if the result would overflow. This results in generated code like the following: mov eax, lo mov edx, hi mov reg, const_val cmp edx, reg jb noOverflow mov temp, eax mov edx, eax xor edx, edx div edx:eax, const_val mov eax, temp noOverflow: div edx:eax, const_val Which is identical to the code produced by JIT32 and the legacy backend.