[aarch64-port-dev ] RFR: JDK-8183533 AArch64: redundant registers saving in arraycopy stubs
White, Derek
Derek.White at cavium.com
Mon Jul 17 14:13:23 UTC 2017
Still looks good.
* Derek
From: Zhongwei Yao [mailto:zhongwei.yao at linaro.org]
Sent: Monday, July 17, 2017 2:03 AM
To: White, Derek <Derek.White at cavium.com>; Andrew Haley <aph at redhat.com>; aarch64-port-dev at openjdk.java.net
Subject: Re: [aarch64-port-dev ] RFR: JDK-8183533 AArch64: redundant registers saving in arraycopy stubs
Hi, all,
Thanks for your review and feedback!
Patch is updated: http://cr.openjdk.java.net/~njian/8183533/webrev.01/
On 14 July 2017 at 23:37, White, Derek <Derek.White at cavium.com<mailto:Derek.White at cavium.com>> wrote:
Hi Zhongwei,
A great improvement!
> -----Original Message-----
> From: aarch64-port-dev [mailto:aarch64-port-dev-<mailto:aarch64-port-dev->
> bounces at openjdk.java.net<mailto:bounces at openjdk.java.net>] On Behalf Of Zhongwei Yao
> Sent: Friday, July 14, 2017 12:33 AM
> To: aarch64-port-dev at openjdk.java.net<mailto:aarch64-port-dev at openjdk.java.net>
> Subject: [aarch64-port-dev ] RFR: JDK-8183533 AArch64: redundant registers
> saving in arraycopy stubs
>
> Hi, all,
> In disjoint oop arraycopy stub, conjoint oop arraycopy stub and checkcasingt
> arraycopy stub, gen_write_ref_array_*_barrier will save all call-clobbered
> registers. Those saves are actually redundant. This patch removes these
> redundant saved registers and improves performance.
>
> For example in StubRoutines::arrayof_oop_disjoint_arraycopy
> Before applying this patch:
>
> StubRoutines::arrayof_oop_disjoint_arraycopy [0x0000ffffa0678c80,
> 0x0000ffffa0678f5c[ (732 bytes)
> 0x0000ffffa0678c80: stp x29, x30, [sp,#-16]!
> 0x0000ffffa0678c84: mov x29, sp
> 0x0000ffffa0678c88: stp x1, x2, [sp,#-16]!
> 0x0000ffffa0678c8c: stp x0, x1, [sp,#-144]!
> 0x0000ffffa0678c90: stp x2, x3, [sp,#16]
> 0x0000ffffa0678c94: stp x4, x5, [sp,#32]
> 0x0000ffffa0678c98: stp x6, x7, [sp,#48]
> 0x0000ffffa0678c9c: stp x10, x11, [sp,#64]
> 0x0000ffffa0678ca0: stp x12, x13, [sp,#80]
> 0x0000ffffa0678ca4: stp x14, x15, [sp,#96]
> 0x0000ffffa0678ca8: stp x16, x17, [sp,#112]
> 0x0000ffffa0678cac: stp x18, xzr, [sp,#128]
> 0x0000ffffa0678cb0: stp d30, d31, [sp,#-16]!
> 0x0000ffffa0678cb4: stp d28, d29, [sp,#-16]!
> 0x0000ffffa0678cb8: stp d26, d27, [sp,#-16]!
> 0x0000ffffa0678cbc: stp d24, d25, [sp,#-16]!
> 0x0000ffffa0678cc0: stp d22, d23, [sp,#-16]!
> 0x0000ffffa0678cc4: stp d20, d21, [sp,#-16]!
> 0x0000ffffa0678cc8: stp d18, d19, [sp,#-16]!
> 0x0000ffffa0678ccc: stp d16, d17, [sp,#-16]!
> 0x0000ffffa0678cd0: stp d6, d7, [sp,#-16]!
> 0x0000ffffa0678cd4: stp d4, d5, [sp,#-16]!
> 0x0000ffffa0678cd8: stp d2, d3, [sp,#-16]!
> 0x0000ffffa0678cdc: stp d0, d1, [sp,#-16]!
> 0x0000ffffa0678ce0: mov x0, x1
> 0x0000ffffa0678ce4: mov x1, x2
> 0x0000ffffa0678ce8: stp x8, x12, [sp,#-16]!
> 0x0000ffffa0678cec: mov x8, #0x5ce0 // #23776
> 0x0000ffffa0678cf0: movk x8, #0xa3cd, lsl #16
> 0x0000ffffa0678cf4: movk x8, #0xffff, lsl #32
> 0x0000ffffa0678cf8: blr x8
> 0x0000ffffa0678cfc: ldp x8, x12, [sp],#16
> 0x0000ffffa0678d00: isb
> 0x0000ffffa0678d04: ldp d0, d1, [sp],#16
> 0x0000ffffa0678d08: ldp d2, d3, [sp],#16
> 0x0000ffffa0678d0c: ldp d4, d5, [sp],#16
> 0x0000ffffa0678d10: ldp d6, d7, [sp],#16
> 0x0000ffffa0678d14: ldp d16, d17, [sp],#16
> 0x0000ffffa0678d18: ldp d18, d19, [sp],#16
> 0x0000ffffa0678d1c: ldp d20, d21, [sp],#16
> 0x0000ffffa0678d20: ldp d22, d23, [sp],#16
> 0x0000ffffa0678d24: ldp d24, d25, [sp],#16
> 0x0000ffffa0678d28: ldp d26, d27, [sp],#16
> 0x0000ffffa0678d2c: ldp d28, d29, [sp],#16
> 0x0000ffffa0678d30: ldp d30, d31, [sp],#16
> 0x0000ffffa0678d34: ldp x2, x3, [sp,#16]
> 0x0000ffffa0678d38: ldp x4, x5, [sp,#32]
> 0x0000ffffa0678d3c: ldp x6, x7, [sp,#48]
> 0x0000ffffa0678d40: ldp x10, x11, [sp,#64]
> 0x0000ffffa0678d44: ldp x12, x13, [sp,#80]
> 0x0000ffffa0678d48: ldp x14, x15, [sp,#96]
> 0x0000ffffa0678d4c: ldp x16, x17, [sp,#112]
> 0x0000ffffa0678d50: ldp x18, xzr, [sp,#128]
> 0x0000ffffa0678d54: ldp x0, x1, [sp],#144
> 0x0000ffffa0678d58: prfm pldl1keep, [x0]
> ...
>
> After applying this patch:
>
> StubRoutines::arrayof_oop_disjoint_arraycopy [0x0000ffff8887ec80,
> 0x0000ffff8887ee1c[ (412 bytes)
> 0x0000ffff8887ec80: stp x29, x30, [sp,#-16]!
> 0x0000ffff8887ec84: mov x29, sp
> 0x0000ffff8887ec88: stp x0, x1, [sp,#-32]!
> 0x0000ffff8887ec8c: stp x2, xzr, [sp,#16]
> 0x0000ffff8887ec90: mov x0, x1
> 0x0000ffff8887ec94: mov x1, x2
> 0x0000ffff8887ec98: stp x8, x12, [sp,#-16]!
> 0x0000ffff8887ec9c: mov x8, #0x2ce0 // #11488
> 0x0000ffff8887eca0: movk x8, #0x9998, lsl #16
> 0x0000ffff8887eca4: movk x8, #0xffff, lsl #32
> 0x0000ffff8887eca8: blr x8
> 0x0000ffff8887ecac: ldp x8, x12, [sp],#16
> 0x0000ffff8887ecb0: isb
> 0x0000ffff8887ecb4: ldp x2, xzr, [sp,#16]
> 0x0000ffff8887ecb8: ldp x0, x1, [sp],#32
> 0x0000ffff8887ecbc: stp x1, x2, [sp,#-16]!
> 0x0000ffff8887ecc0: prfm pldl1keep, [x0]
> ...
>
> And this patch passes all jtreg tests.
>
> Bug:
> https://bugs.openjdk.java.net/browse/JDK-8183533
>
> Webrev:
> http://cr.openjdk.java.net/~njian/8183533/webrev.00/
>
> Please help to review it.
>
> --
> Best regards,
> Zhongwei
--
Best regards,
Zhongwei
More information about the aarch64-port-dev
mailing list