1*73760931SAnshuman Khandual/* 2*73760931SAnshuman Khandual * Basic assembly code to read BHRB entries 3*73760931SAnshuman Khandual * 4*73760931SAnshuman Khandual * Copyright 2013 Anshuman Khandual, IBM Corporation. 5*73760931SAnshuman Khandual * 6*73760931SAnshuman Khandual * This program is free software; you can redistribute it and/or 7*73760931SAnshuman Khandual * modify it under the terms of the GNU General Public License 8*73760931SAnshuman Khandual * as published by the Free Software Foundation; either version 9*73760931SAnshuman Khandual * 2 of the License, or (at your option) any later version. 10*73760931SAnshuman Khandual */ 11*73760931SAnshuman Khandual#include <asm/ppc_asm.h> 12*73760931SAnshuman Khandual#include <asm/ppc-opcode.h> 13*73760931SAnshuman Khandual 14*73760931SAnshuman Khandual .text 15*73760931SAnshuman Khandual 16*73760931SAnshuman Khandual.balign 8 17*73760931SAnshuman Khandual 18*73760931SAnshuman Khandual/* r3 = n (where n = [0-31]) 19*73760931SAnshuman Khandual * The maximum number of BHRB entries supported with PPC_MFBHRBE instruction 20*73760931SAnshuman Khandual * is 1024. We have limited number of table entries here as POWER8 implements 21*73760931SAnshuman Khandual * 32 BHRB entries. 22*73760931SAnshuman Khandual */ 23*73760931SAnshuman Khandual 24*73760931SAnshuman Khandual/* .global read_bhrb */ 25*73760931SAnshuman Khandual_GLOBAL(read_bhrb) 26*73760931SAnshuman Khandual cmpldi r3,31 27*73760931SAnshuman Khandual bgt 1f 28*73760931SAnshuman Khandual ld r4,bhrb_table@got(r2) 29*73760931SAnshuman Khandual sldi r3,r3,3 30*73760931SAnshuman Khandual add r3,r4,r3 31*73760931SAnshuman Khandual mtctr r3 32*73760931SAnshuman Khandual bctr 33*73760931SAnshuman Khandual1: li r3,0 34*73760931SAnshuman Khandual blr 35*73760931SAnshuman Khandual 36*73760931SAnshuman Khandual#define MFBHRB_TABLE1(n) PPC_MFBHRBE(R3,n); blr 37*73760931SAnshuman Khandual#define MFBHRB_TABLE2(n) MFBHRB_TABLE1(n); MFBHRB_TABLE1(n+1) 38*73760931SAnshuman Khandual#define MFBHRB_TABLE4(n) MFBHRB_TABLE2(n); MFBHRB_TABLE2(n+2) 39*73760931SAnshuman Khandual#define MFBHRB_TABLE8(n) MFBHRB_TABLE4(n); MFBHRB_TABLE4(n+4) 40*73760931SAnshuman Khandual#define MFBHRB_TABLE16(n) MFBHRB_TABLE8(n); MFBHRB_TABLE8(n+8) 41*73760931SAnshuman Khandual#define MFBHRB_TABLE32(n) MFBHRB_TABLE16(n); MFBHRB_TABLE16(n+16) 42*73760931SAnshuman Khandual 43*73760931SAnshuman Khandualbhrb_table: 44*73760931SAnshuman Khandual MFBHRB_TABLE32(0) 45