root/tools/testing/selftests/powerpc/pmu/loop.S
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright 2013, Michael Ellerman, IBM Corp.
 */

#include <ppc-asm.h>

        .text

FUNC_START(thirty_two_instruction_loop)
        cmpdi   r3,0
        beqlr
        addi    r4,r3,1
        addi    r4,r4,1
        addi    r4,r4,1
        addi    r4,r4,1
        addi    r4,r4,1
        addi    r4,r4,1
        addi    r4,r4,1
        addi    r4,r4,1
        addi    r4,r4,1
        addi    r4,r4,1
        addi    r4,r4,1
        addi    r4,r4,1
        addi    r4,r4,1
        addi    r4,r4,1
        addi    r4,r4,1
        addi    r4,r4,1
        addi    r4,r4,1
        addi    r4,r4,1
        addi    r4,r4,1
        addi    r4,r4,1
        addi    r4,r4,1
        addi    r4,r4,1
        addi    r4,r4,1
        addi    r4,r4,1
        addi    r4,r4,1
        addi    r4,r4,1
        addi    r4,r4,1
        addi    r4,r4,1 # 28 addi's
        subi    r3,r3,1
        b       FUNC_NAME(thirty_two_instruction_loop)
FUNC_END(thirty_two_instruction_loop)

FUNC_START(thirty_two_instruction_loop_with_ll_sc)
        cmpdi   r3,0
        beqlr
        addi    r5,r5,1
        addi    r5,r5,1
        addi    r5,r5,1         # 5
        addi    r5,r5,1
        addi    r5,r5,1
        addi    r5,r5,1
        addi    r5,r5,1
1:      ldarx   r6,0,r4         # 10
        addi    r5,r5,1
        addi    r5,r5,1
        addi    r5,r5,1
        addi    r5,r5,1
        addi    r5,r5,1         # 15
        addi    r5,r5,1
        addi    r5,r5,1
        stdcx.  r6,0,r4
        bne-    1b
        addi    r5,r5,1         # 20
        addi    r5,r5,1
        addi    r5,r5,1
        addi    r5,r5,1
        addi    r5,r5,1
        addi    r5,r5,1         # 25
        addi    r5,r5,1
        addi    r5,r5,1
        addi    r5,r5,1
        addi    r5,r5,1
        addi    r5,r5,1         # 30
        subi    r3,r3,1
        b       FUNC_NAME(thirty_two_instruction_loop_with_ll_sc)
FUNC_END(thirty_two_instruction_loop_with_ll_sc)