From: Peter Michael Green Date: Sat, 23 Jan 2021 13:16:09 +0000 (+0000) Subject: Fix missing ) in ubfx/sbfx replacements. X-Git-Tag: archive/raspbian/10.0.0+r36-3+rpi1~2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=c40112421ae4b38c9e3c4cca0cc074ababfa39bd;p=android-platform-art.git Fix missing ) in ubfx/sbfx replacements. --- diff --git a/debian/patches/hack-out-ubfx-and-sbfx.patch b/debian/patches/hack-out-ubfx-and-sbfx.patch index 0ce0249..1b5a29a 100644 --- a/debian/patches/hack-out-ubfx-and-sbfx.patch +++ b/debian/patches/hack-out-ubfx-and-sbfx.patch @@ -9,7 +9,7 @@ index b57e119..7531f9e 100644 - ubfx r2, r3, #LOCK_WORD_THIN_LOCK_COUNT_SHIFT, #LOCK_WORD_THIN_LOCK_COUNT_SIZE + @ begin replacement of ubfx r2, r3, #LOCK_WORD_THIN_LOCK_COUNT_SHIFT, #LOCK_WORD_THIN_LOCK_COUNT_SIZE + lsl r2, r3, #(32-(LOCK_WORD_THIN_LOCK_COUNT_SIZE)-(LOCK_WORD_THIN_LOCK_COUNT_SHIFT)) -+ lsr r2, r2, #((32-(LOCK_WORD_THIN_LOCK_COUNT_SIZE)) ++ lsr r2, r2, #((32-(LOCK_WORD_THIN_LOCK_COUNT_SIZE))) + @ end replacement of ubfx r2, r3, #LOCK_WORD_THIN_LOCK_COUNT_SHIFT, #LOCK_WORD_THIN_LOCK_COUNT_SIZE cbz r2, .Lslow_lock @ Zero as the new count indicates overflow, go slow path. strex r2, r3, [r0, #MIRROR_OBJECT_LOCK_WORD_OFFSET] @ strex necessary for read barrier bits. @@ -21,7 +21,7 @@ index b57e119..7531f9e 100644 - ubfx r1, r12, #0, #METHOD_DEX_CACHE_HASH_BITS // Calculate DexCache method slot index. + @ begin replacement of ubfx r1, r12, #0, #METHOD_DEX_CACHE_HASH_BITS // Calculate DexCache method slot index. + lsl r1, r12, #(32-(METHOD_DEX_CACHE_HASH_BITS)-(0)) -+ lsr r1, r1, #((32-(METHOD_DEX_CACHE_HASH_BITS)) ++ lsr r1, r1, #((32-(METHOD_DEX_CACHE_HASH_BITS))) + @ end replacement of ubfx r1, r12, #0, #METHOD_DEX_CACHE_HASH_BITS // Calculate DexCache method slot index. ldr r4, [r4, #MIRROR_DEX_CACHE_RESOLVED_METHODS_OFFSET] // Load the resolved methods. add r4, r4, r1, lsl #(POINTER_SIZE_SHIFT + 1) // Load DexCache method slot address. @@ -37,7 +37,7 @@ index a6ba454..0e98485 100644 - ubfx r9, rINST, #8, #4 @ r9<- A + @ begin replacement of ubfx r9, rINST, #8, #4 @ r9<- A + lsl r9, rINST, #(32-(4)-(8)) -+ lsr r9, r9, #((32-(4)) ++ lsr r9, r9, #((32-(4))) + @ end replacement of ubfx r9, rINST, #8, #4 @ r9<- A GET_VREG r1, r3 @ r1<- vB GET_VREG r0, r9 @ r0<- vA @@ -49,7 +49,7 @@ index a6ba454..0e98485 100644 - ubfx r9, rINST, #8, #4 @ r9<- A + @ begin replacement of ubfx r9, rINST, #8, #4 @ r9<- A + lsl r9, rINST, #(32-(4)-(8)) -+ lsr r9, r9, #((32-(4)) ++ lsr r9, r9, #((32-(4))) + @ end replacement of ubfx r9, rINST, #8, #4 @ r9<- A GET_VREG r0, r2 @ r0<- vB .if $chkzero @@ -61,7 +61,7 @@ index a6ba454..0e98485 100644 - ubfx rINST, rINST, #8, #4 @ rINST<- A + @ begin replacement of ubfx rINST, rINST, #8, #4 @ rINST<- A + lsl rINST, rINST, #(32-(4)-(8)) -+ lsr rINST, rINST, #((32-(4)) ++ lsr rINST, rINST, #((32-(4))) + @ end replacement of ubfx rINST, rINST, #8, #4 @ rINST<- A VREG_INDEX_TO_ADDR r1, r1 @ r1<- &fp[B] VREG_INDEX_TO_ADDR r9, rINST @ r9<- &fp[A] @@ -73,7 +73,7 @@ index a6ba454..0e98485 100644 - ubfx r9, rINST, #8, #4 @ r9<- A + @ begin replacement of ubfx r9, rINST, #8, #4 @ r9<- A + lsl r9, rINST, #(32-(4)-(8)) -+ lsr r9, r9, #((32-(4)) ++ lsr r9, r9, #((32-(4))) + @ end replacement of ubfx r9, rINST, #8, #4 @ r9<- A GET_VREG r0, r3 @ r0<- vB $preinstr @ optional op; may set condition codes @@ -85,7 +85,7 @@ index a6ba454..0e98485 100644 - ubfx r9, rINST, #8, #4 @ r9<- A + @ begin replacement of ubfx r9, rINST, #8, #4 @ r9<- A + lsl r9, rINST, #(32-(4)-(8)) -+ lsr r9, r9, #((32-(4)) ++ lsr r9, r9, #((32-(4))) + @ end replacement of ubfx r9, rINST, #8, #4 @ r9<- A VREG_INDEX_TO_ADDR r3, r3 @ r3<- &fp[B] GET_VREG_WIDE_BY_ADDR r0, r1, r3 @ r0/r1<- vB/vB+1 @@ -97,7 +97,7 @@ index a6ba454..0e98485 100644 - ubfx rINST, rINST, #8, #4 @ rINST<- A + @ begin replacement of ubfx rINST, rINST, #8, #4 @ rINST<- A + lsl rINST, rINST, #(32-(4)-(8)) -+ lsr rINST, rINST, #((32-(4)) ++ lsr rINST, rINST, #((32-(4))) + @ end replacement of ubfx rINST, rINST, #8, #4 @ rINST<- A VREG_INDEX_TO_ADDR r3, r3 @ r3<- &fp[B] VREG_INDEX_TO_ADDR r9, rINST @ r9<- &fp[A] @@ -109,7 +109,7 @@ index a6ba454..0e98485 100644 - ubfx rINST, rINST, #8, #4 @ rINST<- A + @ begin replacement of ubfx rINST, rINST, #8, #4 @ rINST<- A + lsl rINST, rINST, #(32-(4)-(8)) -+ lsr rINST, rINST, #((32-(4)) ++ lsr rINST, rINST, #((32-(4))) + @ end replacement of ubfx rINST, rINST, #8, #4 @ rINST<- A GET_VREG r0, r3 @ r0<- vB VREG_INDEX_TO_ADDR r9, rINST @ r9<- &fp[A] @@ -121,7 +121,7 @@ index a6ba454..0e98485 100644 - ubfx r9, rINST, #8, #4 @ r9<- A + @ begin replacement of ubfx r9, rINST, #8, #4 @ r9<- A + lsl r9, rINST, #(32-(4)-(8)) -+ lsr r9, r9, #((32-(4)) ++ lsr r9, r9, #((32-(4))) + @ end replacement of ubfx r9, rINST, #8, #4 @ r9<- A GET_VREG r1, r3 @ r1<- vB GET_VREG r0, r9 @ r0<- vA @@ -133,7 +133,7 @@ index a6ba454..0e98485 100644 - ubfx r9, rINST, #8, #4 @ r9<- A + @ begin replacement of ubfx r9, rINST, #8, #4 @ r9<- A + lsl r9, rINST, #(32-(4)-(8)) -+ lsr r9, r9, #((32-(4)) ++ lsr r9, r9, #((32-(4))) + @ end replacement of ubfx r9, rINST, #8, #4 @ r9<- A GET_VREG r0, r2 @ r0<- vB cmp r1, #0 @ is second operand zero? @@ -145,7 +145,7 @@ index a6ba454..0e98485 100644 - ubfx r9, rINST, #8, #4 @ r9<- A + @ begin replacement of ubfx r9, rINST, #8, #4 @ r9<- A + lsl r9, rINST, #(32-(4)-(8)) -+ lsr r9, r9, #((32-(4)) ++ lsr r9, r9, #((32-(4))) + @ end replacement of ubfx r9, rINST, #8, #4 @ r9<- A VREG_INDEX_TO_ADDR r1, r1 @ r1<- &fp[B] VREG_INDEX_TO_ADDR rINST, r9 @ rINST<- &fp[A] @@ -157,7 +157,7 @@ index a6ba454..0e98485 100644 - ubfx r9, rINST, #8, #4 @ r9<- A + @ begin replacement of ubfx r9, rINST, #8, #4 @ r9<- A + lsl r9, rINST, #(32-(4)-(8)) -+ lsr r9, r9, #((32-(4)) ++ lsr r9, r9, #((32-(4))) + @ end replacement of ubfx r9, rINST, #8, #4 @ r9<- A GET_VREG r1, r3 @ r1<- vB GET_VREG r0, r9 @ r0<- vA @@ -169,7 +169,7 @@ index a6ba454..0e98485 100644 - ubfx r9, rINST, #8, #4 @ r9<- A + @ begin replacement of ubfx r9, rINST, #8, #4 @ r9<- A + lsl r9, rINST, #(32-(4)-(8)) -+ lsr r9, r9, #((32-(4)) ++ lsr r9, r9, #((32-(4))) + @ end replacement of ubfx r9, rINST, #8, #4 @ r9<- A GET_VREG r0, r2 @ r0<- vB cmp r1, #0 @ is second operand zero? @@ -181,7 +181,7 @@ index a6ba454..0e98485 100644 - ubfx r9, rINST, #8, #4 @ r9<- A + @ begin replacement of ubfx r9, rINST, #8, #4 @ r9<- A + lsl r9, rINST, #(32-(4)-(8)) -+ lsr r9, r9, #((32-(4)) ++ lsr r9, r9, #((32-(4))) + @ end replacement of ubfx r9, rINST, #8, #4 @ r9<- A GET_VREG r2, r3 @ r2<- vB CLEAR_SHADOW_PAIR r9, lr, ip @ Zero out the shadow regs @@ -193,7 +193,7 @@ index a6ba454..0e98485 100644 - ubfx r9, rINST, #8, #4 @ r9<- A + @ begin replacement of ubfx r9, rINST, #8, #4 @ r9<- A + lsl r9, rINST, #(32-(4)-(8)) -+ lsr r9, r9, #((32-(4)) ++ lsr r9, r9, #((32-(4))) + @ end replacement of ubfx r9, rINST, #8, #4 @ r9<- A GET_VREG r2, r3 @ r2<- vB CLEAR_SHADOW_PAIR r9, lr, ip @ Zero out the shadow regs @@ -205,7 +205,7 @@ index a6ba454..0e98485 100644 - ubfx r9, rINST, #8, #4 @ r9<- A + @ begin replacement of ubfx r9, rINST, #8, #4 @ r9<- A + lsl r9, rINST, #(32-(4)-(8)) -+ lsr r9, r9, #((32-(4)) ++ lsr r9, r9, #((32-(4))) + @ end replacement of ubfx r9, rINST, #8, #4 @ r9<- A GET_VREG r2, r3 @ r2<- vB CLEAR_SHADOW_PAIR r9, lr, ip @ Zero out the shadow regs @@ -221,7 +221,7 @@ index 7b3db61..0c12dbf 100644 - ubfx r2, rINST, #8, #4 @ r2<- A + @ begin replacement of ubfx r2, rINST, #8, #4 @ r2<- A + lsl r2, rINST, #(32-(4)-(8)) -+ lsr r2, r2, #((32-(4)) ++ lsr r2, r2, #((32-(4))) + @ end replacement of ubfx r2, rINST, #8, #4 @ r2<- A GET_VREG r0, r1 @ r0<- vB (object ref) cmp r0, #0 @ is object null? @@ -237,7 +237,7 @@ index 2299ef9..89c3b93 100644 - ubfx r0, rINST, #8, #4 @ r0<- A + @ begin replacement of ubfx r0, rINST, #8, #4 @ r0<- A + lsl r0, rINST, #(32-(4)-(8)) -+ lsr r0, r0, #((32-(4)) ++ lsr r0, r0, #((32-(4))) + @ end replacement of ubfx r0, rINST, #8, #4 @ r0<- A GET_VREG r3, r1 @ r3<- vB GET_VREG r0, r0 @ r0<- vA @@ -249,7 +249,7 @@ index 2299ef9..89c3b93 100644 - sbfx rINST, rINST, #8, #8 @ rINST<- ssssssAA (sign-extended) + @ begin replacement of sbfx rINST, rINST, #8, #8 @ rINST<- ssssssAA (sign-extended) + lsl rINST, rINST, #(32-(8)-(8)) -+ asr rINST, rINST, #((32-(8)) ++ asr rINST, rINST, #((32-(8))) + @ end replacement of sbfx rINST, rINST, #8, #8 @ rINST<- ssssssAA (sign-extended) b MterpCommonTakenBranchNoFlags @@ -265,7 +265,7 @@ index 035fc13..f2b7b3b 100644 - ubfx r9, rINST, #8, #4 @ r9<- A + @ begin replacement of ubfx r9, rINST, #8, #4 @ r9<- A + lsl r9, rINST, #(32-(4)-(8)) -+ lsr r9, r9, #((32-(4)) ++ lsr r9, r9, #((32-(4))) + @ end replacement of ubfx r9, rINST, #8, #4 @ r9<- A VREG_INDEX_TO_ADDR r3, r3 @ r3<- &vB VREG_INDEX_TO_ADDR r9, r9 @ r9<- &vA @@ -277,7 +277,7 @@ index 035fc13..f2b7b3b 100644 - ubfx r9, rINST, #8, #4 @ r9<- A + @ begin replacement of ubfx r9, rINST, #8, #4 @ r9<- A + lsl r9, rINST, #(32-(4)-(8)) -+ lsr r9, r9, #((32-(4)) ++ lsr r9, r9, #((32-(4))) + @ end replacement of ubfx r9, rINST, #8, #4 @ r9<- A VREG_INDEX_TO_ADDR r3, r3 @ r3<- &vB CLEAR_SHADOW_PAIR r9, ip, r0 @ Zero out shadow regs @@ -289,7 +289,7 @@ index 035fc13..f2b7b3b 100644 - ubfx r9, rINST, #8, #4 @ r9<- A + @ begin replacement of ubfx r9, rINST, #8, #4 @ r9<- A + lsl r9, rINST, #(32-(4)-(8)) -+ lsr r9, r9, #((32-(4)) ++ lsr r9, r9, #((32-(4))) + @ end replacement of ubfx r9, rINST, #8, #4 @ r9<- A FETCH_ADVANCE_INST 1 @ advance rPC, load rINST $instr @ s1<- op @@ -301,7 +301,7 @@ index 035fc13..f2b7b3b 100644 - ubfx r9, rINST, #8, #4 @ r9<- A + @ begin replacement of ubfx r9, rINST, #8, #4 @ r9<- A + lsl r9, rINST, #(32-(4)-(8)) -+ lsr r9, r9, #((32-(4)) ++ lsr r9, r9, #((32-(4))) + @ end replacement of ubfx r9, rINST, #8, #4 @ r9<- A FETCH_ADVANCE_INST 1 @ advance rPC, load rINST $instr @ s0<- op @@ -313,7 +313,7 @@ index 035fc13..f2b7b3b 100644 - ubfx r9, rINST, #8, #4 @ r9<- A + @ begin replacement of ubfx r9, rINST, #8, #4 @ r9<- A + lsl r9, rINST, #(32-(4)-(8)) -+ lsr r9, r9, #((32-(4)) ++ lsr r9, r9, #((32-(4))) + @ end replacement of ubfx r9, rINST, #8, #4 @ r9<- A FETCH_ADVANCE_INST 1 @ advance rPC, load rINST $instr @ d0<- op @@ -325,7 +325,7 @@ index 035fc13..f2b7b3b 100644 - ubfx r2, r1, #20, #11 @ grab the exponent + @ begin replacement of ubfx r2, r1, #20, #11 @ grab the exponent + lsl r2, r1, #(32-(11)-(20)) -+ lsr r2, r2, #((32-(11)) ++ lsr r2, r2, #((32-(11))) + @ end replacement of ubfx r2, r1, #20, #11 @ grab the exponent movw r3, #0x43e cmp r2, r3 @ MINLONG < x > MAXLONG? @@ -337,7 +337,7 @@ index 035fc13..f2b7b3b 100644 - ubfx r2, r0, #23, #8 @ grab the exponent + @ begin replacement of ubfx r2, r0, #23, #8 @ grab the exponent + lsl r2, r0, #(32-(8)-(23)) -+ lsr r2, r2, #((32-(8)) ++ lsr r2, r2, #((32-(8))) + @ end replacement of ubfx r2, r0, #23, #8 @ grab the exponent cmp r2, #0xbe @ MININT < x > MAXINT? bhs f2l_special_cases @@ -349,7 +349,7 @@ index 035fc13..f2b7b3b 100644 - ubfx r9, rINST, #8, #4 @ r9<- A + @ begin replacement of ubfx r9, rINST, #8, #4 @ r9<- A + lsl r9, rINST, #(32-(4)-(8)) -+ lsr r9, r9, #((32-(4)) ++ lsr r9, r9, #((32-(4))) + @ end replacement of ubfx r9, rINST, #8, #4 @ r9<- A CLEAR_SHADOW_PAIR r9, ip, lr @ Zero shadow regs VREG_INDEX_TO_ADDR r3, r3 @ r3<- &fp[B] @@ -365,7 +365,7 @@ index a044d91..404e9ce 100644 - ubfx r1, rPC, #2, #THREAD_INTERPRETER_CACHE_SIZE_LOG2 @ entry index + @ begin replacement of ubfx r1, rPC, #2, #THREAD_INTERPRETER_CACHE_SIZE_LOG2 @ entry index + lsl r1, rPC, #(32-(THREAD_INTERPRETER_CACHE_SIZE_LOG2)-(2)) -+ lsr r1, r1, #((32-(THREAD_INTERPRETER_CACHE_SIZE_LOG2)) ++ lsr r1, r1, #((32-(THREAD_INTERPRETER_CACHE_SIZE_LOG2))) + @ end replacement of ubfx r1, rPC, #2, #THREAD_INTERPRETER_CACHE_SIZE_LOG2 @ entry index add r0, r0, r1, lsl #3 @ entry address within the cache ldrd r0, r1, [r0] @ entry key (pc) and value (offset) @@ -377,7 +377,7 @@ index a044d91..404e9ce 100644 - ubfx r2, rINST, #8, #4 @ A + @ begin replacement of ubfx r2, rINST, #8, #4 @ A + lsl r2, rINST, #(32-(4)-(8)) -+ lsr r2, r2, #((32-(4)) ++ lsr r2, r2, #((32-(4))) + @ end replacement of ubfx r2, rINST, #8, #4 @ A FETCH_ADVANCE_INST 2 @ advance rPC, load rINST % if is_object: @@ -389,7 +389,7 @@ index a044d91..404e9ce 100644 - ubfx r2, rINST, #8, #4 @ r2<- A + @ begin replacement of ubfx r2, rINST, #8, #4 @ r2<- A + lsl r2, rINST, #(32-(4)-(8)) -+ lsr r2, r2, #((32-(4)) ++ lsr r2, r2, #((32-(4))) + @ end replacement of ubfx r2, rINST, #8, #4 @ r2<- A PREFETCH_INST 2 cmp r3, #0 @@ -401,7 +401,7 @@ index a044d91..404e9ce 100644 - ubfx r2, rINST, #8, #4 @ r2<- A + @ begin replacement of ubfx r2, rINST, #8, #4 @ r2<- A + lsl r2, rINST, #(32-(4)-(8)) -+ lsr r2, r2, #((32-(4)) ++ lsr r2, r2, #((32-(4))) + @ end replacement of ubfx r2, rINST, #8, #4 @ r2<- A cmp r3, #0 @ check object for null beq common_errNullObject @ object was null @@ -413,7 +413,7 @@ index a044d91..404e9ce 100644 - ubfx r2, rINST, #8, #4 @ r2<- A + @ begin replacement of ubfx r2, rINST, #8, #4 @ r2<- A + lsl r2, rINST, #(32-(4)-(8)) -+ lsr r2, r2, #((32-(4)) ++ lsr r2, r2, #((32-(4))) + @ end replacement of ubfx r2, rINST, #8, #4 @ r2<- A cmp r3, #0 @ check object for null beq common_errNullObject @ object was null @@ -425,7 +425,7 @@ index a044d91..404e9ce 100644 - ubfx r9, rINST, #8, #4 @ r9<- A + @ begin replacement of ubfx r9, rINST, #8, #4 @ r9<- A + lsl r9, rINST, #(32-(4)-(8)) -+ lsr r9, r9, #((32-(4)) ++ lsr r9, r9, #((32-(4))) + @ end replacement of ubfx r9, rINST, #8, #4 @ r9<- A PREFETCH_INST 2 cmp r1, #0 @ exception pending? @@ -437,7 +437,7 @@ index a044d91..404e9ce 100644 - ubfx r2, rINST, #8, #4 @ r2<- A + @ begin replacement of ubfx r2, rINST, #8, #4 @ r2<- A + lsl r2, rINST, #(32-(4)-(8)) -+ lsr r2, r2, #((32-(4)) ++ lsr r2, r2, #((32-(4))) + @ end replacement of ubfx r2, rINST, #8, #4 @ r2<- A cmp r3, #0 @ check object for null beq common_errNullObject @ object was null @@ -449,7 +449,7 @@ index a044d91..404e9ce 100644 - ubfx r0, rINST, #8, #4 @ r0<- A + @ begin replacement of ubfx r0, rINST, #8, #4 @ r0<- A + lsl r0, rINST, #(32-(4)-(8)) -+ lsr r0, r0, #((32-(4)) ++ lsr r0, r0, #((32-(4))) + @ end replacement of ubfx r0, rINST, #8, #4 @ r0<- A cmp r2, #0 @ check object for null beq common_errNullObject @ object was null @@ -466,11 +466,11 @@ index 31b9354..491219a 100644 - ubfx r0, rINST, #8, #4 @ r0<- A + @ begin replacement of sbfx r1, rINST, #12, #4 @ r1<- sssssssB (sign-extended) + lsl r1, rINST, #(32-(4)-(12)) -+ asr r1, r1, #((32-(4)) ++ asr r1, r1, #((32-(4))) + @ end replacement of sbfx r1, rINST, #12, #4 @ r1<- sssssssB (sign-extended) + @ begin replacement of ubfx r0, rINST, #8, #4 @ r0<- A + lsl r0, rINST, #(32-(4)-(8)) -+ lsr r0, r0, #((32-(4)) ++ lsr r0, r0, #((32-(4))) + @ end replacement of ubfx r0, rINST, #8, #4 @ r0<- A FETCH_ADVANCE_INST 1 @ advance rPC, load rINST GET_INST_OPCODE ip @ ip<- opcode from rINST @@ -482,7 +482,7 @@ index 31b9354..491219a 100644 - ubfx r0, rINST, #8, #4 @ r0<- A from 11:8 + @ begin replacement of ubfx r0, rINST, #8, #4 @ r0<- A from 11:8 + lsl r0, rINST, #(32-(4)-(8)) -+ lsr r0, r0, #((32-(4)) ++ lsr r0, r0, #((32-(4))) + @ end replacement of ubfx r0, rINST, #8, #4 @ r0<- A from 11:8 FETCH_ADVANCE_INST 1 @ advance rPC, load rINST GET_VREG r2, r1 @ r2<- fp[B] @@ -494,7 +494,7 @@ index 31b9354..491219a 100644 - ubfx rINST, rINST, #8, #4 @ rINST<- A + @ begin replacement of ubfx rINST, rINST, #8, #4 @ rINST<- A + lsl rINST, rINST, #(32-(4)-(8)) -+ lsr rINST, rINST, #((32-(4)) ++ lsr rINST, rINST, #((32-(4))) + @ end replacement of ubfx rINST, rINST, #8, #4 @ rINST<- A VREG_INDEX_TO_ADDR r3, r3 @ r3<- &fp[B] VREG_INDEX_TO_ADDR r2, rINST @ r2<- &fp[A] @@ -549,7 +549,7 @@ index 0000000..8a79cc8 + rightshift = 'lsr' + else: + rightshift = 'asr' -+ print(linestartwhitespace+rightshift+' '+destreg+', '+destreg+', #((32-('+width+'))') ++ print(linestartwhitespace+rightshift+' '+destreg+', '+destreg+', #((32-('+width+')))') + print(linestartwhitespace+'@ end replacement of '+linels) + else: + print(line) diff --git a/debian/patches/replace-movw.patch b/debian/patches/replace-movw.patch index 413c6da..c8f8f86 100644 --- a/debian/patches/replace-movw.patch +++ b/debian/patches/replace-movw.patch @@ -7,7 +7,7 @@ index f2b7b3b..2f78fa9 100644 +++ b/runtime/interpreter/mterp/arm/floating_point.S @@ -353,12 +353,14 @@ d2l_doconv: lsl r2, r1, #(32-(11)-(20)) - lsr r2, r2, #((32-(11)) + lsr r2, r2, #((32-(11))) @ end replacement of ubfx r2, r1, #20, #11 @ grab the exponent - movw r3, #0x43e + mov r3, #0x03e diff --git a/runtime/arch/arm/quick_entrypoints_arm.S b/runtime/arch/arm/quick_entrypoints_arm.S index 7531f9e..72dcf0e 100644 --- a/runtime/arch/arm/quick_entrypoints_arm.S +++ b/runtime/arch/arm/quick_entrypoints_arm.S @@ -716,7 +716,7 @@ ENTRY art_quick_lock_object @ Extract the new thin lock count for overflow check. @ begin replacement of ubfx r2, r3, #LOCK_WORD_THIN_LOCK_COUNT_SHIFT, #LOCK_WORD_THIN_LOCK_COUNT_SIZE lsl r2, r3, #(32-(LOCK_WORD_THIN_LOCK_COUNT_SIZE)-(LOCK_WORD_THIN_LOCK_COUNT_SHIFT)) - lsr r2, r2, #((32-(LOCK_WORD_THIN_LOCK_COUNT_SIZE)) + lsr r2, r2, #((32-(LOCK_WORD_THIN_LOCK_COUNT_SIZE))) @ end replacement of ubfx r2, r3, #LOCK_WORD_THIN_LOCK_COUNT_SHIFT, #LOCK_WORD_THIN_LOCK_COUNT_SIZE cbz r2, .Lslow_lock @ Zero as the new count indicates overflow, go slow path. strex r2, r3, [r0, #MIRROR_OBJECT_LOCK_WORD_OFFSET] @ strex necessary for read barrier bits. @@ -1626,7 +1626,7 @@ ENTRY art_quick_imt_conflict_trampoline UNPOISON_HEAP_REF r4 @ begin replacement of ubfx r1, r12, #0, #METHOD_DEX_CACHE_HASH_BITS // Calculate DexCache method slot index. lsl r1, r12, #(32-(METHOD_DEX_CACHE_HASH_BITS)-(0)) - lsr r1, r1, #((32-(METHOD_DEX_CACHE_HASH_BITS)) + lsr r1, r1, #((32-(METHOD_DEX_CACHE_HASH_BITS))) @ end replacement of ubfx r1, r12, #0, #METHOD_DEX_CACHE_HASH_BITS // Calculate DexCache method slot index. ldr r4, [r4, #MIRROR_DEX_CACHE_RESOLVED_METHODS_OFFSET] // Load the resolved methods. add r4, r4, r1, lsl #(POINTER_SIZE_SHIFT + 1) // Load DexCache method slot address. diff --git a/runtime/interpreter/mterp/arm/arithmetic.S b/runtime/interpreter/mterp/arm/arithmetic.S index 0e98485..910a94d 100644 --- a/runtime/interpreter/mterp/arm/arithmetic.S +++ b/runtime/interpreter/mterp/arm/arithmetic.S @@ -53,7 +53,7 @@ mov r3, rINST, lsr #12 @ r3<- B @ begin replacement of ubfx r9, rINST, #8, #4 @ r9<- A lsl r9, rINST, #(32-(4)-(8)) - lsr r9, r9, #((32-(4)) + lsr r9, r9, #((32-(4))) @ end replacement of ubfx r9, rINST, #8, #4 @ r9<- A GET_VREG r1, r3 @ r1<- vB GET_VREG r0, r9 @ r0<- vA @@ -88,7 +88,7 @@ mov r2, rINST, lsr #12 @ r2<- B @ begin replacement of ubfx r9, rINST, #8, #4 @ r9<- A lsl r9, rINST, #(32-(4)-(8)) - lsr r9, r9, #((32-(4)) + lsr r9, r9, #((32-(4))) @ end replacement of ubfx r9, rINST, #8, #4 @ r9<- A GET_VREG r0, r2 @ r0<- vB .if $chkzero @@ -197,7 +197,7 @@ mov r1, rINST, lsr #12 @ r1<- B @ begin replacement of ubfx rINST, rINST, #8, #4 @ rINST<- A lsl rINST, rINST, #(32-(4)-(8)) - lsr rINST, rINST, #((32-(4)) + lsr rINST, rINST, #((32-(4))) @ end replacement of ubfx rINST, rINST, #8, #4 @ rINST<- A VREG_INDEX_TO_ADDR r1, r1 @ r1<- &fp[B] VREG_INDEX_TO_ADDR r9, rINST @ r9<- &fp[A] @@ -229,7 +229,7 @@ mov r3, rINST, lsr #12 @ r3<- B @ begin replacement of ubfx r9, rINST, #8, #4 @ r9<- A lsl r9, rINST, #(32-(4)-(8)) - lsr r9, r9, #((32-(4)) + lsr r9, r9, #((32-(4))) @ end replacement of ubfx r9, rINST, #8, #4 @ r9<- A GET_VREG r0, r3 @ r0<- vB $preinstr @ optional op; may set condition codes @@ -255,7 +255,7 @@ mov r3, rINST, lsr #12 @ r3<- B @ begin replacement of ubfx r9, rINST, #8, #4 @ r9<- A lsl r9, rINST, #(32-(4)-(8)) - lsr r9, r9, #((32-(4)) + lsr r9, r9, #((32-(4))) @ end replacement of ubfx r9, rINST, #8, #4 @ r9<- A VREG_INDEX_TO_ADDR r3, r3 @ r3<- &fp[B] GET_VREG_WIDE_BY_ADDR r0, r1, r3 @ r0/r1<- vB/vB+1 @@ -279,7 +279,7 @@ mov r3, rINST, lsr #12 @ r3<- B @ begin replacement of ubfx rINST, rINST, #8, #4 @ rINST<- A lsl rINST, rINST, #(32-(4)-(8)) - lsr rINST, rINST, #((32-(4)) + lsr rINST, rINST, #((32-(4))) @ end replacement of ubfx rINST, rINST, #8, #4 @ rINST<- A VREG_INDEX_TO_ADDR r3, r3 @ r3<- &fp[B] VREG_INDEX_TO_ADDR r9, rINST @ r9<- &fp[A] @@ -305,7 +305,7 @@ mov r3, rINST, lsr #12 @ r3<- B @ begin replacement of ubfx rINST, rINST, #8, #4 @ rINST<- A lsl rINST, rINST, #(32-(4)-(8)) - lsr rINST, rINST, #((32-(4)) + lsr rINST, rINST, #((32-(4))) @ end replacement of ubfx rINST, rINST, #8, #4 @ rINST<- A GET_VREG r0, r3 @ r0<- vB VREG_INDEX_TO_ADDR r9, rINST @ r9<- &fp[A] @@ -424,7 +424,7 @@ mov r3, rINST, lsr #12 @ r3<- B @ begin replacement of ubfx r9, rINST, #8, #4 @ r9<- A lsl r9, rINST, #(32-(4)-(8)) - lsr r9, r9, #((32-(4)) + lsr r9, r9, #((32-(4))) @ end replacement of ubfx r9, rINST, #8, #4 @ r9<- A GET_VREG r1, r3 @ r1<- vB GET_VREG r0, r9 @ r0<- vA @@ -458,7 +458,7 @@ mov r2, rINST, lsr #12 @ r2<- B @ begin replacement of ubfx r9, rINST, #8, #4 @ r9<- A lsl r9, rINST, #(32-(4)-(8)) - lsr r9, r9, #((32-(4)) + lsr r9, r9, #((32-(4))) @ end replacement of ubfx r9, rINST, #8, #4 @ r9<- A GET_VREG r0, r2 @ r0<- vB cmp r1, #0 @ is second operand zero? @@ -595,7 +595,7 @@ mov r1, rINST, lsr #12 @ r1<- B @ begin replacement of ubfx r9, rINST, #8, #4 @ r9<- A lsl r9, rINST, #(32-(4)-(8)) - lsr r9, r9, #((32-(4)) + lsr r9, r9, #((32-(4))) @ end replacement of ubfx r9, rINST, #8, #4 @ r9<- A VREG_INDEX_TO_ADDR r1, r1 @ r1<- &fp[B] VREG_INDEX_TO_ADDR rINST, r9 @ rINST<- &fp[A] @@ -691,7 +691,7 @@ mov r3, rINST, lsr #12 @ r3<- B @ begin replacement of ubfx r9, rINST, #8, #4 @ r9<- A lsl r9, rINST, #(32-(4)-(8)) - lsr r9, r9, #((32-(4)) + lsr r9, r9, #((32-(4))) @ end replacement of ubfx r9, rINST, #8, #4 @ r9<- A GET_VREG r1, r3 @ r1<- vB GET_VREG r0, r9 @ r0<- vA @@ -728,7 +728,7 @@ mov r2, rINST, lsr #12 @ r2<- B @ begin replacement of ubfx r9, rINST, #8, #4 @ r9<- A lsl r9, rINST, #(32-(4)-(8)) - lsr r9, r9, #((32-(4)) + lsr r9, r9, #((32-(4))) @ end replacement of ubfx r9, rINST, #8, #4 @ r9<- A GET_VREG r0, r2 @ r0<- vB cmp r1, #0 @ is second operand zero? @@ -841,7 +841,7 @@ mov r3, rINST, lsr #12 @ r3<- B @ begin replacement of ubfx r9, rINST, #8, #4 @ r9<- A lsl r9, rINST, #(32-(4)-(8)) - lsr r9, r9, #((32-(4)) + lsr r9, r9, #((32-(4))) @ end replacement of ubfx r9, rINST, #8, #4 @ r9<- A GET_VREG r2, r3 @ r2<- vB CLEAR_SHADOW_PAIR r9, lr, ip @ Zero out the shadow regs @@ -906,7 +906,7 @@ mov r3, rINST, lsr #12 @ r3<- B @ begin replacement of ubfx r9, rINST, #8, #4 @ r9<- A lsl r9, rINST, #(32-(4)-(8)) - lsr r9, r9, #((32-(4)) + lsr r9, r9, #((32-(4))) @ end replacement of ubfx r9, rINST, #8, #4 @ r9<- A GET_VREG r2, r3 @ r2<- vB CLEAR_SHADOW_PAIR r9, lr, ip @ Zero out the shadow regs @@ -983,7 +983,7 @@ mov r3, rINST, lsr #12 @ r3<- B @ begin replacement of ubfx r9, rINST, #8, #4 @ r9<- A lsl r9, rINST, #(32-(4)-(8)) - lsr r9, r9, #((32-(4)) + lsr r9, r9, #((32-(4))) @ end replacement of ubfx r9, rINST, #8, #4 @ r9<- A GET_VREG r2, r3 @ r2<- vB CLEAR_SHADOW_PAIR r9, lr, ip @ Zero out the shadow regs diff --git a/runtime/interpreter/mterp/arm/array.S b/runtime/interpreter/mterp/arm/array.S index 0c12dbf..dcddb32 100644 --- a/runtime/interpreter/mterp/arm/array.S +++ b/runtime/interpreter/mterp/arm/array.S @@ -181,7 +181,7 @@ mov r1, rINST, lsr #12 @ r1<- B @ begin replacement of ubfx r2, rINST, #8, #4 @ r2<- A lsl r2, rINST, #(32-(4)-(8)) - lsr r2, r2, #((32-(4)) + lsr r2, r2, #((32-(4))) @ end replacement of ubfx r2, rINST, #8, #4 @ r2<- A GET_VREG r0, r1 @ r0<- vB (object ref) cmp r0, #0 @ is object null? diff --git a/runtime/interpreter/mterp/arm/control_flow.S b/runtime/interpreter/mterp/arm/control_flow.S index 89c3b93..0b13b9f 100644 --- a/runtime/interpreter/mterp/arm/control_flow.S +++ b/runtime/interpreter/mterp/arm/control_flow.S @@ -9,7 +9,7 @@ mov r1, rINST, lsr #12 @ r1<- B @ begin replacement of ubfx r0, rINST, #8, #4 @ r0<- A lsl r0, rINST, #(32-(4)-(8)) - lsr r0, r0, #((32-(4)) + lsr r0, r0, #((32-(4))) @ end replacement of ubfx r0, rINST, #8, #4 @ r0<- A GET_VREG r3, r1 @ r3<- vB GET_VREG r0, r0 @ r0<- vA @@ -51,7 +51,7 @@ /* goto +AA */ @ begin replacement of sbfx rINST, rINST, #8, #8 @ rINST<- ssssssAA (sign-extended) lsl rINST, rINST, #(32-(8)-(8)) - asr rINST, rINST, #((32-(8)) + asr rINST, rINST, #((32-(8))) @ end replacement of sbfx rINST, rINST, #8, #8 @ rINST<- ssssssAA (sign-extended) b MterpCommonTakenBranchNoFlags diff --git a/runtime/interpreter/mterp/arm/floating_point.S b/runtime/interpreter/mterp/arm/floating_point.S index 2f78fa9..1825b83 100644 --- a/runtime/interpreter/mterp/arm/floating_point.S +++ b/runtime/interpreter/mterp/arm/floating_point.S @@ -34,7 +34,7 @@ mov r3, rINST, lsr #12 @ r3<- B @ begin replacement of ubfx r9, rINST, #8, #4 @ r9<- A lsl r9, rINST, #(32-(4)-(8)) - lsr r9, r9, #((32-(4)) + lsr r9, r9, #((32-(4))) @ end replacement of ubfx r9, rINST, #8, #4 @ r9<- A VREG_INDEX_TO_ADDR r3, r3 @ r3<- &vB VREG_INDEX_TO_ADDR r9, r9 @ r9<- &vA @@ -84,7 +84,7 @@ mov r3, rINST, lsr #12 @ r3<- B @ begin replacement of ubfx r9, rINST, #8, #4 @ r9<- A lsl r9, rINST, #(32-(4)-(8)) - lsr r9, r9, #((32-(4)) + lsr r9, r9, #((32-(4))) @ end replacement of ubfx r9, rINST, #8, #4 @ r9<- A VREG_INDEX_TO_ADDR r3, r3 @ r3<- &vB CLEAR_SHADOW_PAIR r9, ip, r0 @ Zero out shadow regs @@ -110,7 +110,7 @@ GET_VREG_FLOAT_BY_ADDR s0, r3 @ s0<- vB @ begin replacement of ubfx r9, rINST, #8, #4 @ r9<- A lsl r9, rINST, #(32-(4)-(8)) - lsr r9, r9, #((32-(4)) + lsr r9, r9, #((32-(4))) @ end replacement of ubfx r9, rINST, #8, #4 @ r9<- A FETCH_ADVANCE_INST 1 @ advance rPC, load rINST $instr @ s1<- op @@ -131,7 +131,7 @@ GET_VREG_DOUBLE_BY_ADDR d0, r3 @ d0<- vB @ begin replacement of ubfx r9, rINST, #8, #4 @ r9<- A lsl r9, rINST, #(32-(4)-(8)) - lsr r9, r9, #((32-(4)) + lsr r9, r9, #((32-(4))) @ end replacement of ubfx r9, rINST, #8, #4 @ r9<- A FETCH_ADVANCE_INST 1 @ advance rPC, load rINST $instr @ s0<- op @@ -152,7 +152,7 @@ GET_VREG_FLOAT_BY_ADDR s0, r3 @ s0<- vB @ begin replacement of ubfx r9, rINST, #8, #4 @ r9<- A lsl r9, rINST, #(32-(4)-(8)) - lsr r9, r9, #((32-(4)) + lsr r9, r9, #((32-(4))) @ end replacement of ubfx r9, rINST, #8, #4 @ r9<- A FETCH_ADVANCE_INST 1 @ advance rPC, load rINST $instr @ d0<- op @@ -351,7 +351,7 @@ d2l_doconv: @ begin replacement of ubfx r2, r1, #20, #11 @ grab the exponent lsl r2, r1, #(32-(11)-(20)) - lsr r2, r2, #((32-(11)) + lsr r2, r2, #((32-(11))) @ end replacement of ubfx r2, r1, #20, #11 @ grab the exponent mov r3, #0x03e orr r3, #0x400 @@ -398,7 +398,7 @@ d2l_maybeNaN: f2l_doconv: @ begin replacement of ubfx r2, r0, #23, #8 @ grab the exponent lsl r2, r0, #(32-(8)-(23)) - lsr r2, r2, #((32-(8)) + lsr r2, r2, #((32-(8))) @ end replacement of ubfx r2, r0, #23, #8 @ grab the exponent cmp r2, #0xbe @ MININT < x > MAXINT? bhs f2l_special_cases @@ -437,7 +437,7 @@ f2l_maybeNaN: mov r3, rINST, lsr #12 @ r3<- B @ begin replacement of ubfx r9, rINST, #8, #4 @ r9<- A lsl r9, rINST, #(32-(4)-(8)) - lsr r9, r9, #((32-(4)) + lsr r9, r9, #((32-(4))) @ end replacement of ubfx r9, rINST, #8, #4 @ r9<- A CLEAR_SHADOW_PAIR r9, ip, lr @ Zero shadow regs VREG_INDEX_TO_ADDR r3, r3 @ r3<- &fp[B] diff --git a/runtime/interpreter/mterp/arm/object.S b/runtime/interpreter/mterp/arm/object.S index 404e9ce..89e35fb 100644 --- a/runtime/interpreter/mterp/arm/object.S +++ b/runtime/interpreter/mterp/arm/object.S @@ -39,7 +39,7 @@ add r0, rSELF, #THREAD_INTERPRETER_CACHE_OFFSET @ cache address @ begin replacement of ubfx r1, rPC, #2, #THREAD_INTERPRETER_CACHE_SIZE_LOG2 @ entry index lsl r1, rPC, #(32-(THREAD_INTERPRETER_CACHE_SIZE_LOG2)-(2)) - lsr r1, r1, #((32-(THREAD_INTERPRETER_CACHE_SIZE_LOG2)) + lsr r1, r1, #((32-(THREAD_INTERPRETER_CACHE_SIZE_LOG2))) @ end replacement of ubfx r1, rPC, #2, #THREAD_INTERPRETER_CACHE_SIZE_LOG2 @ entry index add r0, r0, r1, lsl #3 @ entry address within the cache ldrd r0, r1, [r0] @ entry key (pc) and value (offset) @@ -70,7 +70,7 @@ % #endif @ begin replacement of ubfx r2, rINST, #8, #4 @ A lsl r2, rINST, #(32-(4)-(8)) - lsr r2, r2, #((32-(4)) + lsr r2, r2, #((32-(4))) @ end replacement of ubfx r2, rINST, #8, #4 @ A FETCH_ADVANCE_INST 2 @ advance rPC, load rINST % if is_object: @@ -122,7 +122,7 @@ ldr r3, [rSELF, #THREAD_EXCEPTION_OFFSET] @ begin replacement of ubfx r2, rINST, #8, #4 @ r2<- A lsl r2, rINST, #(32-(4)-(8)) - lsr r2, r2, #((32-(4)) + lsr r2, r2, #((32-(4))) @ end replacement of ubfx r2, rINST, #8, #4 @ r2<- A PREFETCH_INST 2 cmp r3, #0 @@ -140,7 +140,7 @@ GET_VREG r3, r2 @ r3<- object we're operating on @ begin replacement of ubfx r2, rINST, #8, #4 @ r2<- A lsl r2, rINST, #(32-(4)-(8)) - lsr r2, r2, #((32-(4)) + lsr r2, r2, #((32-(4))) @ end replacement of ubfx r2, rINST, #8, #4 @ r2<- A cmp r3, #0 @ check object for null beq common_errNullObject @ object was null @@ -166,7 +166,7 @@ GET_VREG r3, r2 @ r3<- object we're operating on @ begin replacement of ubfx r2, rINST, #8, #4 @ r2<- A lsl r2, rINST, #(32-(4)-(8)) - lsr r2, r2, #((32-(4)) + lsr r2, r2, #((32-(4))) @ end replacement of ubfx r2, rINST, #8, #4 @ r2<- A cmp r3, #0 @ check object for null beq common_errNullObject @ object was null @@ -196,7 +196,7 @@ ldr r1, [rSELF, #THREAD_EXCEPTION_OFFSET] @ begin replacement of ubfx r9, rINST, #8, #4 @ r9<- A lsl r9, rINST, #(32-(4)-(8)) - lsr r9, r9, #((32-(4)) + lsr r9, r9, #((32-(4))) @ end replacement of ubfx r9, rINST, #8, #4 @ r9<- A PREFETCH_INST 2 cmp r1, #0 @ exception pending? @@ -250,7 +250,7 @@ GET_VREG r3, r2 @ r3<- fp[B], the object pointer @ begin replacement of ubfx r2, rINST, #8, #4 @ r2<- A lsl r2, rINST, #(32-(4)-(8)) - lsr r2, r2, #((32-(4)) + lsr r2, r2, #((32-(4))) @ end replacement of ubfx r2, rINST, #8, #4 @ r2<- A cmp r3, #0 @ check object for null beq common_errNullObject @ object was null @@ -276,7 +276,7 @@ GET_VREG r2, r2 @ r2<- fp[B], the object pointer @ begin replacement of ubfx r0, rINST, #8, #4 @ r0<- A lsl r0, rINST, #(32-(4)-(8)) - lsr r0, r0, #((32-(4)) + lsr r0, r0, #((32-(4))) @ end replacement of ubfx r0, rINST, #8, #4 @ r0<- A cmp r2, #0 @ check object for null beq common_errNullObject @ object was null diff --git a/runtime/interpreter/mterp/arm/other.S b/runtime/interpreter/mterp/arm/other.S index 491219a..2689fa8 100644 --- a/runtime/interpreter/mterp/arm/other.S +++ b/runtime/interpreter/mterp/arm/other.S @@ -47,11 +47,11 @@ /* const/4 vA, #+B */ @ begin replacement of sbfx r1, rINST, #12, #4 @ r1<- sssssssB (sign-extended) lsl r1, rINST, #(32-(4)-(12)) - asr r1, r1, #((32-(4)) + asr r1, r1, #((32-(4))) @ end replacement of sbfx r1, rINST, #12, #4 @ r1<- sssssssB (sign-extended) @ begin replacement of ubfx r0, rINST, #8, #4 @ r0<- A lsl r0, rINST, #(32-(4)-(8)) - lsr r0, r0, #((32-(4)) + lsr r0, r0, #((32-(4))) @ end replacement of ubfx r0, rINST, #8, #4 @ r0<- A FETCH_ADVANCE_INST 1 @ advance rPC, load rINST GET_INST_OPCODE ip @ ip<- opcode from rINST @@ -200,7 +200,7 @@ mov r1, rINST, lsr #12 @ r1<- B from 15:12 @ begin replacement of ubfx r0, rINST, #8, #4 @ r0<- A from 11:8 lsl r0, rINST, #(32-(4)-(8)) - lsr r0, r0, #((32-(4)) + lsr r0, r0, #((32-(4))) @ end replacement of ubfx r0, rINST, #8, #4 @ r0<- A from 11:8 FETCH_ADVANCE_INST 1 @ advance rPC, load rINST GET_VREG r2, r1 @ r2<- fp[B] @@ -298,7 +298,7 @@ mov r3, rINST, lsr #12 @ r3<- B @ begin replacement of ubfx rINST, rINST, #8, #4 @ rINST<- A lsl rINST, rINST, #(32-(4)-(8)) - lsr rINST, rINST, #((32-(4)) + lsr rINST, rINST, #((32-(4))) @ end replacement of ubfx rINST, rINST, #8, #4 @ rINST<- A VREG_INDEX_TO_ADDR r3, r3 @ r3<- &fp[B] VREG_INDEX_TO_ADDR r2, rINST @ r2<- &fp[A] diff --git a/runtime/interpreter/mterp/replace-ubfx.py b/runtime/interpreter/mterp/replace-ubfx.py index 8a79cc8..5bde326 100644 --- a/runtime/interpreter/mterp/replace-ubfx.py +++ b/runtime/interpreter/mterp/replace-ubfx.py @@ -42,7 +42,7 @@ for line in f: rightshift = 'lsr' else: rightshift = 'asr' - print(linestartwhitespace+rightshift+' '+destreg+', '+destreg+', #((32-('+width+'))') + print(linestartwhitespace+rightshift+' '+destreg+', '+destreg+', #((32-('+width+')))') print(linestartwhitespace+'@ end replacement of '+linels) else: print(line)