| /* | |
| * Basic assembly code to read BHRB entries | |
| * | |
| * Copyright 2013 Anshuman Khandual, IBM Corporation. | |
| * | |
| * This program is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU General Public License | |
| * as published by the Free Software Foundation; either version | |
| * 2 of the License, or (at your option) any later version. | |
| */ | |
| #include <asm/ppc_asm.h> | |
| #include <asm/ppc-opcode.h> | |
| .text | |
| .balign 8 | |
| /* r3 = n (where n = [0-31]) | |
| * The maximum number of BHRB entries supported with PPC_MFBHRBE instruction | |
| * is 1024. We have limited number of table entries here as POWER8 implements | |
| * 32 BHRB entries. | |
| */ | |
| /* .global read_bhrb */ | |
| _GLOBAL(read_bhrb) | |
| cmpldi r3,31 | |
| bgt 1f | |
| ld r4,bhrb_table@got(r2) | |
| sldi r3,r3,3 | |
| add r3,r4,r3 | |
| mtctr r3 | |
| bctr | |
| 1: li r3,0 | |
| blr | |
| #define MFBHRB_TABLE1(n) PPC_MFBHRBE(R3,n); blr | |
| #define MFBHRB_TABLE2(n) MFBHRB_TABLE1(n); MFBHRB_TABLE1(n+1) | |
| #define MFBHRB_TABLE4(n) MFBHRB_TABLE2(n); MFBHRB_TABLE2(n+2) | |
| #define MFBHRB_TABLE8(n) MFBHRB_TABLE4(n); MFBHRB_TABLE4(n+4) | |
| #define MFBHRB_TABLE16(n) MFBHRB_TABLE8(n); MFBHRB_TABLE8(n+8) | |
| #define MFBHRB_TABLE32(n) MFBHRB_TABLE16(n); MFBHRB_TABLE16(n+16) | |
| bhrb_table: | |
| MFBHRB_TABLE32(0) |