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 .data 10 11 jump_table: 12 .long 0x0 13 .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 .text 22 23 #define ITER_SHIFT 31 24 25 .macro state number 26 .balign 32 27 .Lstate_\number: 28 .if \number==7 29 li r3, 0 30 .else 31 li r3, \number+1 32 .endif 33 b .Lloop 34 .endm 35 36 FUNC_START(pattern_cache_loop) 37 li r3, 0 38 li r4, 1 39 sldi r4, r4, ITER_SHIFT 40 41 .Lloop: cmpdi r4, 0 42 beqlr 43 44 addi r4, r4, -1 45 46 ld r6, jump_table@got(%r2) 47 sldi r5, r3, 2 48 lwax r6, r5, r6 49 ld r7, .Lstate_0@got(%r2) 50 add r6, r6, r7 51 mtctr r6 52 bctr 53 54 state 0 55 state 1 56 state 2 57 state 3 58 state 4 59 state 5 60 state 6 61 state 7 62 63 FUNC_END(pattern_cache_loop) 64 65 66 FUNC_START(indirect_branch_loop) 67 li r3, 1 68 sldi r3, r3, ITER_SHIFT 69 70 1: cmpdi r3, 0 71 beqlr 72 73 addi r3, r3, -1 74 75 ld r4, 2f@got(%r2) 76 mtctr r4 77 bctr 78 79 .balign 32 80 2: b 1b 81 82 FUNC_END(indirect_branch_loop)
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.