riscv64: ExecuteNterpImpl basic implementation

Minimal asm to start HelloWorld until we hit the first opcode
(nterp_op_const_4) with SIGILL.

This CL skips argument processing, compact dex, etc.

NOTE that Nterp now claims use x18 (s2) for regular usage,
since the shadow stack register is now assigned at x3 (gp)
from https://android-review.git.corp.google.com/c/platform/art/+/2535780

Test: Run ART test 001-HelloWorld on a Linux RISC-V VM:
  lunch aosp_riscv64-userdebug

  export ART_TEST_SSH_USER=ubuntu
  export ART_TEST_SSH_HOST=localhost
  export ART_TEST_SSH_PORT=10001
  export ART_TEST_ON_VM=true

  . art/tools/buildbot-utils.sh
  art/tools/buildbot-build.sh --target

  # Create, boot and configure the VM.
  art/tools/buildbot-vm.sh create
  art/tools/buildbot-vm.sh boot
  art/tools/buildbot-vm.sh setup-ssh  # password: 'ubuntu'

  art/tools/buildbot-cleanup-device.sh
  art/tools/buildbot-setup-device.sh
  art/tools/buildbot-sync.sh

  # Test switch interpreter
  art/test.py --target -r --no-prebuild --ndebug --no-image \
    --64 --interpreter 001-HelloWorld
  # PASS

  # Test Nterp (first revert 2547153 in local build)
  art/test.py --target -r --no-prebuild --ndebug --no-image \
    --64 001-HelloWorld
  # SIGILL in nterp_op_const_4

Change-Id: I0d5c6bc83af92f299d22477494332fff6c76197c
4 files changed