1115013Smarcel#include <stdio.h> 2115013Smarcel#include <inttypes.h> 3115013Smarcel 4121642Smarcel#define IP 0 5121642Smarcel#define SP 1 6121642Smarcel#define BSP 2 7121642Smarcel#define CFM 3 8121642Smarcel#define RP 4 9121642Smarcel#define PSP 5 10121642Smarcel#define PFS 6 11121642Smarcel#define PREDS 7 12121642Smarcel#define PRIUNAT 8 13121642Smarcel#define AR_BSPSTORE 9 14121642Smarcel#define AR_RNAT 10 15121642Smarcel#define AR_UNAT 11 16121642Smarcel#define AR_FPSR 12 17121642Smarcel#define AR_LC 13 18121642Smarcel#define AR_PFS 14 19121642Smarcel#define GR4 16 20121642Smarcel#define GR5 17 21121642Smarcel#define GR6 18 22121642Smarcel#define GR7 19 23121642Smarcel#define BR1 20 24121642Smarcel#define BR2 21 25121642Smarcel#define BR3 22 26121642Smarcel#define BR4 23 27121642Smarcel#define BR5 24 28121642Smarcel 29115013Smarcelvoid dump_context(uint64_t *context) 30115013Smarcel{ 31115013Smarcel int i, j; 32121642Smarcel unsigned int valid; 33115013Smarcel uint64_t val; 34115013Smarcel static char *names[] = { 35121642Smarcel /* 0 */ "ip", "sp", "bsp", "cfm", 36121642Smarcel /* 4 */ "rp", "psp", "pfs", "preds", 37121642Smarcel /* 8 */ "priunat", "ar.bspstore", "ar.rnat", "ar.unat", 38121642Smarcel /* 12 */ "ar.fpsr", "ar.lc", "ar.pfs", "(pad)", 39121642Smarcel /* 16 */ "gr4", "gr5", "gr6", "gr7", 40121642Smarcel /* 20 */ "br1", "br2", "br3", "br4", "br5" 41115013Smarcel }; 42121642Smarcel static int col1[] = { 43121642Smarcel IP, 44121642Smarcel SP, 45121642Smarcel BSP, 46121642Smarcel CFM, 47121642Smarcel RP, 48121642Smarcel PSP, 49121642Smarcel PFS, 50121642Smarcel AR_RNAT, 51121642Smarcel AR_UNAT, 52121642Smarcel AR_FPSR, 53121642Smarcel AR_LC, 54121642Smarcel AR_PFS, 55115013Smarcel }; 56121642Smarcel static int col2[] = { 57121642Smarcel PREDS, 58121642Smarcel PRIUNAT, 59121642Smarcel GR4, 60121642Smarcel GR5, 61121642Smarcel GR6, 62121642Smarcel GR7, 63121642Smarcel BR1, 64121642Smarcel BR2, 65121642Smarcel BR3, 66121642Smarcel BR4, 67121642Smarcel BR5, 68121642Smarcel }; 69115013Smarcel 70121642Smarcel#define NCOL1 (sizeof(col1)/sizeof(int)) 71121642Smarcel#define NCOL2 (sizeof(col2)/sizeof(int)) 72121642Smarcel#define NPRINT (NCOL1 > NCOL2 ? NCOL1 : NCOL2) 73121642Smarcel 74121642Smarcel valid = (unsigned int)(context[0] >> 32); 75121642Smarcel printf(" valid_regs (%08lx):", valid); 76121642Smarcel for (i = 0; i <= BR5; i++) { 77121642Smarcel if (valid & 1) printf(" %s", names[i]); 78121642Smarcel valid >>= 1; 79121642Smarcel } 80121642Smarcel printf("\n"); 81121642Smarcel for (i = 0; i < NPRINT; i++) { 82121642Smarcel if (i < NCOL1) { 83121642Smarcel j = col1[i]; 84115013Smarcel val = context[j+1]; 85115013Smarcel printf(" %-8s %08x %08x", names[j], 86115013Smarcel (unsigned int)(val >> 32), 87115013Smarcel (unsigned int)val); 88115013Smarcel } 89115013Smarcel else 90115013Smarcel printf(" "); 91121642Smarcel if (i < NCOL2) { 92121642Smarcel j = col2[i]; 93115013Smarcel val = context[j+1]; 94115013Smarcel printf(" %-8s %08x %08x", names[j], 95115013Smarcel (unsigned int)(val >> 32), 96115013Smarcel (unsigned int)val); 97115013Smarcel } 98115013Smarcel putchar('\n'); 99115013Smarcel } 100115013Smarcel} 101