83 lines · plain
1// SPDX-License-Identifier: GPL-2.0+2 3/*4 * Copyright 2019, Michael Ellerman, IBM Corp.5 */6 7#include <ppc-asm.h>8 9 .data10 11jump_table:12 .long 0x013 .long (.Lstate_1 - .Lstate_0)14 .long (.Lstate_2 - .Lstate_0)15 .long (.Lstate_3 - .Lstate_0)16 .long (.Lstate_4 - .Lstate_0)17 .long (.Lstate_5 - .Lstate_0)18 .long (.Lstate_6 - .Lstate_0)19 .long (.Lstate_7 - .Lstate_0)20 21 .text22 23#define ITER_SHIFT 3124 25.macro state number26 .balign 3227.Lstate_\number:28 .if \number==729 li r3, 030 .else31 li r3, \number+132 .endif33 b .Lloop34.endm35 36FUNC_START(pattern_cache_loop)37 li r3, 038 li r4, 139 sldi r4, r4, ITER_SHIFT40 41.Lloop: cmpdi r4, 042 beqlr43 44 addi r4, r4, -145 46 ld r6, jump_table@got(%r2)47 sldi r5, r3, 248 lwax r6, r5, r649 ld r7, .Lstate_0@got(%r2)50 add r6, r6, r751 mtctr r652 bctr53 54 state 055 state 156 state 257 state 358 state 459 state 560 state 661 state 762 63FUNC_END(pattern_cache_loop)64 65 66FUNC_START(indirect_branch_loop)67 li r3, 168 sldi r3, r3, ITER_SHIFT69 701: cmpdi r3, 071 beqlr72 73 addi r3, r3, -174 75 ld r4, 2f@got(%r2)76 mtctr r477 bctr78 79 .balign 32802: b 1b81 82FUNC_END(indirect_branch_loop)83