[Ryujit/ARM32] Implement NYI related with overflow for ARM (dotnet/coreclr#10491)
authorSujin Kim <sjsujin.kim@samsung.com>
Thu, 30 Mar 2017 20:37:13 +0000 (05:37 +0900)
committerBruce Forstall <brucefo@microsoft.com>
Thu, 30 Mar 2017 20:37:13 +0000 (13:37 -0700)
commit617506e413f99c8d8a6e8b6268dcc69434b970e4
treefb1a8002543c007e6e32bf4b078d9bbbcddb6f73
parent245cb93acd2eb14549c8d7817ebde1422bb45079
[Ryujit/ARM32] Implement NYI related with overflow for ARM (dotnet/coreclr#10491)

* Implement NYI(overflow checks) for ARM

On last comment of dotnet/coreclr#8496, the NYI message of overflow checks is printed after running the CodeGenBringUpTests.

That was the message about temp register setup for overflow checks.

It was referenced
https://github.com/dotnet/coreclr/blob/master/src/jit/lsraarm64.cpp#L399

I think it doesn't make any problem even though writing it the same as arm64.

* modifiy for coding convention

* Implement NYI : Unimplmented GT_CAST:int <--> int with overflow

I think it doesn't make any problem even though writing it the same as arm64.
So I copied parts of CodeGen::genIntToIntCast() and modified some below codes.

```
if (emitter::emitIns_valid_imm_for_cmp(castInfo.typeMax, cmpSize))
```
-->
```
if (emitter::emitIns_valid_imm_for_cmp(castInfo.typeMax, INS_FLAGS_DONT_CARE))
```

* Implement NYI : genLongToIntCast: overflow check

I copied and pasted codes from codegenxarch.cpp.
But It seemed be necessary that conditional execution values are changed by each architectures.
So I used 'genJumpKindForOper' for getting the emitJumpKind value.

The sample app has been checked to work well.

* Modify the implementation of emitter::emitIns_valid_imm_for_cmp

According to reference manual, I figured out CMP and ADD have different mechanisms on ARM unlike ARM64.
So I defined "...for_cmp" function not just use "..for_add" in the function likes ARM64.

Commit migrated from https://github.com/dotnet/coreclr/commit/f9380e912b105030cee06544338d6068fb7e97e7
src/coreclr/src/jit/codegenarm.cpp
src/coreclr/src/jit/emitarm.cpp
src/coreclr/src/jit/emitarm.h
src/coreclr/src/jit/lsraarm.cpp