From e5b0a782fadfadb353260bea7b98ed3e42bd7ab6 Mon Sep 17 00:00:00 2001 From: Martin Storsjo Date: Wed, 5 Oct 2016 11:18:16 +0300 Subject: [PATCH] armv8: Use neg instead of sub #0, neg as replacement for rsb When the arm code has been ported to aarch64, occurrances of the rsb instruction have been replaced according to the following pattern: arm: rsb rB, rA, #X aarch64: sub xTMP, xA, #X neg xB, xTMP When the immediate constant #X is zero, we can just as well use a plain neg instruction without any extra subtraction. Change-Id: I637be20b469d8d4e7fac712e8039c7e3eedb8c54 --- common/armv8/ih264_intra_pred_luma_16x16_av8.s | 3 +-- common/armv8/ih264_padding_neon_av8.s | 3 +-- common/armv8/ih264_weighted_bi_pred_av8.s | 6 ++---- common/armv8/ih264_weighted_pred_av8.s | 6 ++---- 4 files changed, 6 insertions(+), 12 deletions(-) diff --git a/common/armv8/ih264_intra_pred_luma_16x16_av8.s b/common/armv8/ih264_intra_pred_luma_16x16_av8.s index 46bc9d0..fa19c12 100644 --- a/common/armv8/ih264_intra_pred_luma_16x16_av8.s +++ b/common/armv8/ih264_intra_pred_luma_16x16_av8.s @@ -444,8 +444,7 @@ ih264_intra_pred_luma_16x16_mode_plane_av8: uxtl v18.8h, v7.8b add x7, x0, x4, lsl #3 sub x0, x7, x4, lsl #1 - sub x20, x4, #0x0 - neg x14, x20 + neg x14, x4 addp v0.8h, v0.8h, v1.8h ldrb w8, [x7], #-1 ldrb w9, [x0], #1 diff --git a/common/armv8/ih264_padding_neon_av8.s b/common/armv8/ih264_padding_neon_av8.s index 4f2ba23..e03fe2f 100644 --- a/common/armv8/ih264_padding_neon_av8.s +++ b/common/armv8/ih264_padding_neon_av8.s @@ -90,8 +90,7 @@ ih264_pad_top_av8: stp x19, x20, [sp, #-16]! sub x5, x0, x1 - sub x20, x1, #0 - neg x6, x20 + neg x6, x1 loop_neon_memcpy_mul_16: // Load 16 bytes diff --git a/common/armv8/ih264_weighted_bi_pred_av8.s b/common/armv8/ih264_weighted_bi_pred_av8.s index 765bb70..475f690 100644 --- a/common/armv8/ih264_weighted_bi_pred_av8.s +++ b/common/armv8/ih264_weighted_bi_pred_av8.s @@ -145,8 +145,7 @@ ih264_weighted_bi_pred_luma_av8: ldr w8, [sp, #80] //Load wt2 in w8 ldr w9, [sp, #88] //Load ofst1 in w9 add w6, w6, #1 //w6 = log_WD + 1 - sub w20, w6, #0 //w10 = -(log_WD + 1) - neg w10, w20 + neg w10, w6 //w10 = -(log_WD + 1) dup v0.8h, w10 //Q0 = -(log_WD + 1) (32-bit) ldr w10, [sp, #96] //Load ofst2 in w10 ldr w11, [sp, #104] //Load ht in w11 @@ -432,8 +431,7 @@ ih264_weighted_bi_pred_chroma_av8: add w6, w6, #1 //w6 = log_WD + 1 ldr w9, [sp, #88] //Load ofst1 in w9 ldr w10, [sp, #96] //Load ofst2 in w10 - sub w20, w6, #0 //w20 = -(log_WD + 1) - neg w20, w20 + neg w20, w6 //w20 = -(log_WD + 1) dup v0.8h, w20 //Q0 = -(log_WD + 1) (16-bit) ldr w11, [sp, #104] //Load ht in x11 ldr w12, [sp, #112] //Load wd in x12 diff --git a/common/armv8/ih264_weighted_pred_av8.s b/common/armv8/ih264_weighted_pred_av8.s index f2b277b..f145217 100644 --- a/common/armv8/ih264_weighted_pred_av8.s +++ b/common/armv8/ih264_weighted_pred_av8.s @@ -125,8 +125,7 @@ ih264_weighted_pred_luma_av8: sxtw x8, w8 dup v2.4h, w5 //D2 = wt (16-bit) - sub w20, w4, #0 //w9 = -log_WD - neg w9, w20 + neg w9, w4 //w9 = -log_WD dup v3.8b, w6 //D3 = ofst (8-bit) cmp w8, #16 //check if wd is 16 dup v0.8h, w9 //Q0 = -log_WD (16-bit) @@ -354,8 +353,7 @@ ih264_weighted_pred_chroma_av8: ldr w8, [sp, #80] //Load wd sxtw x8, w8 - sub w20, w4, #0 //w9 = -log_WD - neg w9, w20 + neg w9, w4 //w9 = -log_WD dup v2.4s, w5 //Q1 = {wt_u (16-bit), wt_v (16-bit)}