diff options
author | 2020-11-17 13:07:31 +0000 | |
---|---|---|
committer | 2020-11-24 13:16:02 +0000 | |
commit | 6af553d1f411926acdb96d6fa85fb126b761eada (patch) | |
tree | 1d1e8c39f732d7a44d29ac2d7bc9eb74846b8378 | |
parent | 9705c5dc5a1c8f6df6887bc97232e2dcac1fc499 (diff) |
Fix another typo in nterp.
Test: test.py
Change-Id: Ib58880b1e462e9c47a7b55663f39fd29894d2c7c
-rw-r--r-- | runtime/interpreter/mterp/arm64ng/main.S | 4 | ||||
-rw-r--r-- | test/723-string-init-range/smali/new-instance.smali | 11 | ||||
-rw-r--r-- | test/723-string-init-range/src/Main.java | 6 |
3 files changed, 19 insertions, 2 deletions
diff --git a/runtime/interpreter/mterp/arm64ng/main.S b/runtime/interpreter/mterp/arm64ng/main.S index 70375ddcd0..fa4155ead8 100644 --- a/runtime/interpreter/mterp/arm64ng/main.S +++ b/runtime/interpreter/mterp/arm64ng/main.S @@ -391,7 +391,7 @@ END \name .macro SETUP_STACK_FRAME code_item, refs, fp, cfi_refs, load_ins FETCH_CODE_ITEM_INFO \code_item, wip, wip2, w15, \load_ins - // Compute required frame size: ((2 * ip) + ip1) * 4 + 24 + // Compute required frame size: ((2 * ip) + ip2) * 4 + 24 // 24 is for saving the previous frame, pc, and method being executed. add x14, ip, ip add x14, x14, ip2 @@ -1166,7 +1166,7 @@ END \name cmp ip, #68 // Test if result type char == 'D'. b.eq .Lreturn_double_range_\suffix cmp ip, #70 - b.ne .Ldone_return_\suffix + b.ne .Ldone_return_range_\suffix .Lreturn_float_range_\suffix: fmov w0, s0 b .Ldone_return_range_\suffix diff --git a/test/723-string-init-range/smali/new-instance.smali b/test/723-string-init-range/smali/new-instance.smali index f47c8bb965..29fa696b74 100644 --- a/test/723-string-init-range/smali/new-instance.smali +++ b/test/723-string-init-range/smali/new-instance.smali @@ -34,3 +34,14 @@ invoke-direct/range {v0 .. v4}, Ljava/lang/String;-><init>([BIII)V return-object v0 .end method + +.method public static initRangeWithAlias(Ljava/lang/String;)Ljava/lang/String; + .registers 19 + # Put the object in a register > 0xF, as the arm64 nterp implementation wrongly masked + # that register with 0xF when handling String.<init> in an invoke-range. + new-instance v16, Ljava/lang/String; + move-object/from16 v1, v16 + move-object/16 v17, p0 + invoke-direct/range {v16 .. v17}, Ljava/lang/String;-><init>(Ljava/lang/String;)V + return-object v1 +.end method diff --git a/test/723-string-init-range/src/Main.java b/test/723-string-init-range/src/Main.java index 12fb93b772..ca2fb7acbe 100644 --- a/test/723-string-init-range/src/Main.java +++ b/test/723-string-init-range/src/Main.java @@ -33,5 +33,11 @@ public class Main { if (!expected.equals(result)) { throw new Error("Expected '" + expected + "', got " + result); } + + m = c.getMethod("initRangeWithAlias", String.class); + result = (String)m.invoke(null, expected); + if (!expected.equals(result)) { + throw new Error("Expected '" + expected + "', got " + result); + } } } |