173760931SAnshuman Khandual/* 273760931SAnshuman Khandual * Basic assembly code to read BHRB entries 373760931SAnshuman Khandual * 473760931SAnshuman Khandual * Copyright 2013 Anshuman Khandual, IBM Corporation. 573760931SAnshuman Khandual * 673760931SAnshuman Khandual * This program is free software; you can redistribute it and/or 773760931SAnshuman Khandual * modify it under the terms of the GNU General Public License 873760931SAnshuman Khandual * as published by the Free Software Foundation; either version 973760931SAnshuman Khandual * 2 of the License, or (at your option) any later version. 1073760931SAnshuman Khandual */ 1173760931SAnshuman Khandual#include <asm/ppc_asm.h> 1273760931SAnshuman Khandual#include <asm/ppc-opcode.h> 1373760931SAnshuman Khandual 1473760931SAnshuman Khandual .text 1573760931SAnshuman Khandual 1673760931SAnshuman Khandual.balign 8 1773760931SAnshuman Khandual 1873760931SAnshuman Khandual/* r3 = n (where n = [0-31]) 1973760931SAnshuman Khandual * The maximum number of BHRB entries supported with PPC_MFBHRBE instruction 2073760931SAnshuman Khandual * is 1024. We have limited number of table entries here as POWER8 implements 2173760931SAnshuman Khandual * 32 BHRB entries. 2273760931SAnshuman Khandual */ 2373760931SAnshuman Khandual 2473760931SAnshuman Khandual/* .global read_bhrb */ 2573760931SAnshuman Khandual_GLOBAL(read_bhrb) 2673760931SAnshuman Khandual cmpldi r3,31 2773760931SAnshuman Khandual bgt 1f 2873760931SAnshuman Khandual ld r4,bhrb_table@got(r2) 2973760931SAnshuman Khandual sldi r3,r3,3 3073760931SAnshuman Khandual add r3,r4,r3 3173760931SAnshuman Khandual mtctr r3 3273760931SAnshuman Khandual bctr 3373760931SAnshuman Khandual1: li r3,0 3473760931SAnshuman Khandual blr 3573760931SAnshuman Khandual 3673760931SAnshuman Khandual#define MFBHRB_TABLE1(n) PPC_MFBHRBE(R3,n); blr 3773760931SAnshuman Khandual#define MFBHRB_TABLE2(n) MFBHRB_TABLE1(n); MFBHRB_TABLE1(n+1) 3873760931SAnshuman Khandual#define MFBHRB_TABLE4(n) MFBHRB_TABLE2(n); MFBHRB_TABLE2(n+2) 3973760931SAnshuman Khandual#define MFBHRB_TABLE8(n) MFBHRB_TABLE4(n); MFBHRB_TABLE4(n+4) 4073760931SAnshuman Khandual#define MFBHRB_TABLE16(n) MFBHRB_TABLE8(n); MFBHRB_TABLE8(n+8) 4173760931SAnshuman Khandual#define MFBHRB_TABLE32(n) MFBHRB_TABLE16(n); MFBHRB_TABLE16(n+16) 4273760931SAnshuman Khandual 4373760931SAnshuman Khandualbhrb_table: 4473760931SAnshuman Khandual MFBHRB_TABLE32(0) 45