Details

    • Type: Sub-task
    • Status: Resolved
    • Priority: P4
    • Resolution: Fixed
    • Affects Version/s: repo-valhalla
    • Fix Version/s: repo-valhalla
    • Component/s: hotspot
    • Labels:
      None

      Description

      Implement Method::verified_entry and Method::verified_value_ro_entry for C1-compiled methods. This will take multiple steps.

      For this step, support the passing of scalarized oop parameters. E.g.,

      inline class V {
          Object x = null, y = null;
      }

      class Test {
          static void test(V v1, V v2) {...}
      }

      When C2 calls Test.test, it scalarizes the outgoing parameters to

           param0 = v1.x
           param1 = v1.y
           param2 = v2.x
           param3 = v2.y

      If the method is compiled by C1, it expects the incoming parameters to be

          param0 = v1
          param1 = v2

      So we need to shuffle the parameters like

           V tmp = new V();
           tmp.x = param0; // GC barrier!
           tmp.y = param1; // GC barrier!
           param0 = tmp;
           tmp = new V();
           tmp.x = param2; // GC barrier!
           tmp.y = param3; // GC barrier!
           param1 = tmp;

      Note that GC barrier operations need to be applied when the oop fields of the tmp object are modified.

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                iklam Ioi Lam
                Reporter:
                iklam Ioi Lam
              • Votes:
                0 Vote for this issue
                Watchers:
                1 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: