Refactor init/copy block codegen (dotnet/coreclr#27035)
* Delete INITBLK/CPBLK_STOS_LIMIT
* Treat 0 sized block ops as unrolled
Normally 0 sized block ops should be simply removed during lowering. But these are rare enough that adding special code to deal with them is questionable.
Instead unroll such block ops, the unroll codegen simply won't generate any code for a 0 sized block op. Of course, some registers will still be allocated.
* Cleanup BuildBlockStore
* BlkOpKindHelper is not available on x86
* Use GT_STORE_BLK/unroll consistently
Non-GC GT_STORE_OBJ nodes were changed to GT_STORE_BLK in block copy ops
but not in block init ops. Since block init is effectvely non-GC it is
preferable to be consistent and change to GT_STORE_BLK in both cases.
Commit migrated from https://github.com/dotnet/coreclr/commit/
8370e676f2d558fc20b5920d3a424c4e419d5e3a